Merge branch 'gles20' of https://github.com/cocos2d/cocos2d-x into iss1201_android_build

This commit is contained in:
minggo 2012-05-02 14:41:49 +08:00
commit c048fe77c6
92 changed files with 3608 additions and 814 deletions

1
.gitignore vendored
View File

@ -23,6 +23,7 @@ Thumbs.db
[Bb]in
[Dd]ebug*/
*.sbr
*.sdf
obj/
[Rr]elease*/
_ReSharper*/

View File

@ -54,11 +54,6 @@ void SimpleAudioEngine::end()
endJNI();
}
void SimpleAudioEngine::setResource(const char* pszZipFileName)
{
}
void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath)
{
preloadBackgroundMusicJNI(pszFilePath);

View File

@ -295,11 +295,6 @@ void SimpleAudioEngine::end()
}
}
void SimpleAudioEngine::setResource(const char* pszZipFileName)
{
}
void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath)
{
openMediaPlayer(s_pBackPlayer, pszFilePath);

View File

@ -52,12 +52,6 @@ public:
*/
static void end();
/**
@brief Set the zip file name
@param pszZipFileName The relative path of the .zip file
*/
static void setResource(const char* pszZipFileName);
/**
@brief Preload background music
@param pszFilePath The path of the background music file,or the FileName of T_SoundResInfo

View File

@ -172,11 +172,6 @@ void SimpleAudioEngine::end()
static_end();
}
void SimpleAudioEngine::setResource(const char* pszZipFileName)
{
}
void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath)
{
static_preloadBackgroundMusic(pszFilePath);

View File

@ -33,9 +33,6 @@ void SimpleAudioEngine::end() {
// return;
}
void SimpleAudioEngine::setResource(const char* pszZipFileName) {
}
//////////////////////////////////////////////////////////////////////////
// BackgroundMusic
//////////////////////////////////////////////////////////////////////////

View File

@ -95,11 +95,6 @@ namespace CocosDenshion
}
}
void SimpleAudioEngine::setResource(const char* pszZipFileName)
{
// todo
}
void SimpleAudioEngine::preloadBackgroundMusic(const char* pszFilePath)
{
s3eFile *fileHandle = s3eFileOpen(pszFilePath, "rb");

View File

@ -158,10 +158,6 @@ namespace CocosDenshion
stopBackground(true);
}
void SimpleAudioEngine::setResource(const char* pszZipFileName)
{
}
//
// OGG support
//

View File

@ -62,10 +62,6 @@ void SimpleAudioEngine::end()
return;
}
void SimpleAudioEngine::setResource(const char* pszZipFileName)
{
}
//////////////////////////////////////////////////////////////////////////
// BackgroundMusic
//////////////////////////////////////////////////////////////////////////

View File

@ -8,6 +8,7 @@
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
using namespace cocos2d;
using namespace cocos2d::extension;
extern "C"
{
@ -21,21 +22,23 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved)
void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thiz, jint w, jint h)
{
if (!cocos2d::CCDirector::sharedDirector()->getOpenGLView())
if (!CCDirector::sharedDirector()->getOpenGLView())
{
cocos2d::CCEGLView *view = &cocos2d::CCEGLView::sharedOpenGLView();
CCEGLView *view = &CCEGLView::sharedOpenGLView();
view->setFrameSize(w, h);
// if you want to run in WVGA with HVGA resource, set it
// view->create(480, 320);
cocos2d::CCDirector::sharedDirector()->setOpenGLView(view);
CCDirector::sharedDirector()->setOpenGLView(view);
AppDelegate *pAppDelegate = new AppDelegate();
cocos2d::CCApplication::sharedApplication().run();
CCApplication::sharedApplication().run();
}
else
{
cocos2d::CCTextureCache::reloadAllTextures();
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
CCTextureCache::reloadAllTextures();
CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND, NULL);
CCDirector::sharedDirector()->setGLDefaultValues();
}
}

View File

@ -1 +1 @@
9b310a8b553efc1db798797273bd0bfb1b11c857
3ffb5ef04b897f971e1e9c941002d06e5a91da50

View File

@ -11,6 +11,7 @@
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
using namespace cocos2d;
using namespace cocos2d::extension;
extern "C"
{
@ -24,16 +25,16 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved)
void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thiz, jint w, jint h)
{
if (!cocos2d::CCDirector::sharedDirector()->getOpenGLView())
if (!CCDirector::sharedDirector()->getOpenGLView())
{
cocos2d::CCEGLView *view = &cocos2d::CCEGLView::sharedOpenGLView();
CCEGLView *view = &CCEGLView::sharedOpenGLView();
view->setFrameSize(w, h);
// if you want to run in WVGA with HVGA resource, set it
// view->setDesignResolutionSize(480, 320); Please change it to (320, 480) if you're in portrait mode.
cocos2d::CCDirector::sharedDirector()->setOpenGLView(view);
CCDirector::sharedDirector()->setOpenGLView(view);
AppDelegate *pAppDelegate = new AppDelegate();
cocos2d::CCApplication::sharedApplication().run();
CCApplication::sharedApplication().run();
}
else
{
@ -41,9 +42,9 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi
ccGLInvalidateStateCache();
CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
cocos2d::CCTextureCache::reloadAllTextures();
cocos2d::CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND, NULL);
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
CCTextureCache::reloadAllTextures();
CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND, NULL);
CCDirector::sharedDirector()->setGLDefaultValues();
}
}

View File

@ -1 +1 @@
918b8b44c7b180874afc0599a0e1b2b4e13f1e2a
92dc1f3cb8db6691dae94a502b38db89e5293d2d

View File

@ -41,7 +41,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(SolutionDir)cocos2dx1&quot;;&quot;$(SolutionDir)cocos2dx\actions&quot;;&quot;$(SolutionDir)cocos2dx\base_nodes&quot;;&quot;$(SolutionDir)cocos2dx\cocoa&quot;;&quot;$(SolutionDir)cocos2dx\effects&quot;;&quot;$(SolutionDir)cocos2dx\include&quot;;&quot;$(SolutionDir)cocos2dx\kazmath\include&quot;;&quot;$(SolutionDir)cocos2dx\keypad_dispatcher&quot;;&quot;$(SolutionDir)cocos2dx\label_nodes&quot;;&quot;$(SolutionDir)cocos2dx\layers_scenes_transitions_nodes&quot;;&quot;$(SolutionDir)cocos2dx\menu_nodes&quot;;&quot;$(SolutionDir)cocos2dx\misc_nodes&quot;;&quot;$(SolutionDir)cocos2dx\particle_nodes&quot;;&quot;$(SolutionDir)cocos2dx\script_support&quot;;&quot;$(SolutionDir)cocos2dx\shaders&quot;;&quot;$(SolutionDir)cocos2dx\sprite_nodes&quot;;&quot;$(SolutionDir)cocos2dx\support&quot;;&quot;$(SolutionDir)cocos2dx\text_input_node&quot;;&quot;$(SolutionDir)cocos2dx\textures&quot;;&quot;$(SolutionDir)cocos2dx\tileMap_parallax_nodes&quot;;&quot;$(SolutionDir)cocos2dx\touch_dispatcher&quot;;&quot;$(SolutionDir)cocos2dx\platform&quot;;&quot;$(SolutionDir)cocos2dx\platform\win32&quot;;&quot;$(SolutionDir)cocos2dx\platform\third_party\win32\OGLES&quot;;..\Classes"
AdditionalIncludeDirectories="&quot;$(SolutionDir)cocos2dx&quot;;&quot;$(SolutionDir)cocos2dx\actions&quot;;&quot;$(SolutionDir)cocos2dx\base_nodes&quot;;&quot;$(SolutionDir)cocos2dx\cocoa&quot;;&quot;$(SolutionDir)cocos2dx\effects&quot;;&quot;$(SolutionDir)cocos2dx\include&quot;;&quot;$(SolutionDir)cocos2dx\kazmath\include&quot;;&quot;$(SolutionDir)cocos2dx\keypad_dispatcher&quot;;&quot;$(SolutionDir)cocos2dx\label_nodes&quot;;&quot;$(SolutionDir)cocos2dx\layers_scenes_transitions_nodes&quot;;&quot;$(SolutionDir)cocos2dx\menu_nodes&quot;;&quot;$(SolutionDir)cocos2dx\misc_nodes&quot;;&quot;$(SolutionDir)cocos2dx\particle_nodes&quot;;&quot;$(SolutionDir)cocos2dx\script_support&quot;;&quot;$(SolutionDir)cocos2dx\shaders&quot;;&quot;$(SolutionDir)cocos2dx\sprite_nodes&quot;;&quot;$(SolutionDir)cocos2dx\support&quot;;&quot;$(SolutionDir)cocos2dx\text_input_node&quot;;&quot;$(SolutionDir)cocos2dx\textures&quot;;&quot;$(SolutionDir)cocos2dx\tileMap_parallax_nodes&quot;;&quot;$(SolutionDir)cocos2dx\touch_dispatcher&quot;;&quot;$(SolutionDir)cocos2dx\platform&quot;;&quot;$(SolutionDir)cocos2dx\platform\win32&quot;;&quot;$(SolutionDir)cocos2dx\platform\third_party\win32\OGLES&quot;;..\Classes"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
MinimalRebuild="true"
BasicRuntimeChecks="3"

View File

@ -1,76 +0,0 @@
#!/bin/sh
#p=$(dirname $_)
#echo "$p"
#path=$(dirname $0)
#path=${path/\./$(pwd)}
#echo $path
p=.
if [ ! -d "lib" ]; then
mkdir "lib"
fi
if [ ! -d "lib/linux" ]; then
mkdir "lib/linux"
fi
if [ ! -d "lib/linux/Debug" ]; then
mkdir "lib/linux/Debug"
fi
if [ ! -d "lib/linux/Release" ]; then
mkdir "lib/linux/Release"
fi
# copy cocosdenshino depended libs into lib/linux/Debug/
cp CocosDenshion/third_party/linux/fmod/api/lib/*.so lib/linux/Debug
if [ $# -ne 0 ]; then
if [ $1 = "clean" ]; then
cd $p/cocos2dx/proj.linux
make clean
cd ../../
cd $p/CocosDenshion/proj.linux
make clean
cd ../..
cd $p/Box2D/proj.linux
make clean
cd ../..
cd $p/chipmunk/proj.linux
make clean
cd ../../
rm -r lib/linux/Debug/*.so
fi
else
cd $p/cocos2dx/proj.linux
echo "**********************building cocos2dx**************************"
make
cp -f libcocos2d.so ../../lib/linux/Debug
echo "**********************building cocosdenshion*********************"
cd ../../
cd $p/CocosDenshion/proj.linux
make
cp -f libcocosdenshion.so ../../lib/linux/Debug
echo "**********************building Box2D******************************"
cd ../..
cd $p/Box2D/proj.linux
make
cp -f libbox2d.a ../../lib/linux/Debug
echo "**********************building chipmunk***************************"
cd ../..
cd $p/chipmunk/proj.linux
make
cp -f libchipmunk.a ../../lib/linux/Debug
cd ../../
fi

View File

@ -53,6 +53,9 @@ extensions/CCControlExtension/CCInvocation.cpp \
extensions/CCControlExtension/CCMenuPassive.cpp \
extensions/CCControlExtension/CCScale9Sprite.cpp \
extensions/CCControlExtension/CCSpacer.cpp \
extensions/CCListView/CCListView.cpp \
extensions/CCListView/CCListViewCell.cpp \
extensions/CCTextureWatcher/CCTextureWatcher.cpp \
kazmath/src/aabb.c \
kazmath/src/mat3.c \
kazmath/src/mat4.c \

View File

@ -36,7 +36,7 @@ THE SOFTWARE.
#include "CCTransition.h"
#include "CCSpriteFrameCache.h"
#include "CCAutoreleasePool.h"
#include "platform/platform.h"
#include "platform.h"
#include "CCApplication.h"
#include "CCLabelBMFont.h"
#include "CCActionManager.h"
@ -47,17 +47,17 @@ THE SOFTWARE.
#include "CCAnimationCache.h"
#include "CCTouch.h"
#include "CCUserDefault.h"
#include "extensions/CCNotificationCenter/CCNotificationCenter.h"
#include "ccGLStateCache.h"
#include "CCShaderCache.h"
#include "kazmath/kazmath.h"
#include "kazmath/GL/matrix.h"
#include "support/CCProfiling.h"
#include "CCEGLView.h"
#include "extensions/CCNotificationCenter/CCNotificationCenter.h"
#include "extensions/CCTextureWatcher/CCTextureWatcher.h"
#include <string>
using namespace std;
using namespace cocos2d;
unsigned int g_uNumberOfDraws = 0;
@ -90,7 +90,7 @@ CCDirector::CCDirector(void)
bool CCDirector::init(void)
{
CCLOG("cocos2d: %s", cocos2dVersion());
// scenes
m_pRunningScene = NULL;
m_pNextScene = NULL;
@ -131,6 +131,9 @@ bool CCDirector::init(void)
m_fContentScaleFactor = 1;
m_bIsContentScaleSupported = false;
m_pWatcherFun = NULL;
m_pWatcherSender = NULL;
// scheduler
m_pScheduler = new CCScheduler();
// action manager
@ -232,6 +235,10 @@ void CCDirector::drawScene(void)
showStats();
}
if (m_pWatcherFun && m_pWatcherSender)
{
(*m_pWatcherFun)(m_pWatcherSender);
}
kmGLPopMatrix();
@ -584,8 +591,9 @@ void CCDirector::purgeDirector()
// cocos2d-x specific data structures
CCUserDefault::purgeSharedUserDefault();
CCNotificationCenter::purgeNotificationCenter();
extension::CCNotificationCenter::purgeNotificationCenter();
extension::CCTextureWatcher::purgeTextureWatcher();
ccGLInvalidateStateCache();
CHECK_GL_ERROR_DEBUG();
@ -933,5 +941,12 @@ void CCDisplayLinkDirector::setAnimationInterval(double dValue)
}
}
void CCDirector::setWatcherCallbackFun(void *pSender, WatcherCallbackFun fun)
{
m_pWatcherFun = fun;
m_pWatcherSender = pSender;
}
NS_CC_END

View File

@ -273,6 +273,9 @@ public:
void setContentScaleFactor(CCFloat scaleFactor);
CCFloat getContentScaleFactor(void);
typedef void(*WatcherCallbackFun)(void *pSender);
void setWatcherCallbackFun(void *pSender, WatcherCallbackFun fun);
public:
/** CCScheduler associated with this director
@since v2.0
@ -388,6 +391,10 @@ protected:
/* contentScaleFactor could be simulated */
bool m_bIsContentScaleSupported;
WatcherCallbackFun m_pWatcherFun;
void *m_pWatcherSender;
};
/**

View File

@ -524,7 +524,10 @@ void CCNode::addChild(CCNode *child)
void CCNode::removeFromParentAndCleanup(bool cleanup)
{
this->m_pParent->removeChild(this,cleanup);
if (m_pParent != NULL)
{
m_pParent->removeChild(this,cleanup);
}
}
/* "remove" logic MUST only be on this method

View File

@ -32,7 +32,7 @@
#include "CCMenu.h"
#include "CCTouch.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCControl::CCControl()
{
@ -299,4 +299,4 @@ CCArray* CCControl::dispatchListforControlEvent(CCControlEvent controlEvent)
return invocationList;
}
NS_CC_END
NS_CC_EXT_END

View File

@ -33,7 +33,7 @@
#include "CCControlUtils.h"
#include "CCLayer.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
class CCInvocation;
@ -206,6 +206,6 @@ public:
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -33,7 +33,7 @@
using namespace std;
NS_CC_BEGIN
NS_CC_EXT_BEGIN
enum
{
@ -462,4 +462,4 @@ void CCControlButton::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
sendActionsForControlEvents(CCControlEventTouchCancel);
}
NS_CC_END
NS_CC_EXT_END

View File

@ -33,7 +33,7 @@
#include "CCInvocation.h"
#include "CCScale9Sprite.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
/** @class CCControlButton Button control for Cocos2D. */
class CC_DLL CCControlButton : public CCControl
@ -181,6 +181,6 @@ public:
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -33,7 +33,7 @@
#include "CCSpriteFrameCache.h"
#include "CCSpriteBatchNode.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
bool CCControlColourPicker::init()
{
@ -158,4 +158,4 @@ bool CCControlColourPicker::ccTouchBegan(CCTouch* touch, CCEvent* pEvent)
return false;
}
NS_CC_END
NS_CC_EXT_END

View File

@ -37,7 +37,7 @@
#include "CCControlHuePicker.h"
#include "CCControlSaturationBrightnessPicker.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
class CC_DLL CCControlColourPicker: public CCControl
{
@ -65,6 +65,6 @@ protected:
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -31,7 +31,7 @@
#include "CCControlHuePicker.h"
#include "CCPointExtension.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCControlHuePicker::~CCControlHuePicker()
{
@ -158,4 +158,4 @@ void CCControlHuePicker::ccTouchMoved(CCTouch* touch, CCEvent* event)
//checkSliderPosition(touchLocation);
}
NS_CC_END
NS_CC_EXT_END

View File

@ -35,7 +35,7 @@
#include "CCControl.h"
#include "CCInvocation.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
class CC_DLL CCControlHuePicker : public CCControl
{
@ -64,6 +64,6 @@ protected:
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -31,7 +31,7 @@
#include "CCControlSaturationBrightnessPicker.h"
#include "CCPointExtension.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCControlSaturationBrightnessPicker::~CCControlSaturationBrightnessPicker()
{
@ -176,4 +176,4 @@ void CCControlSaturationBrightnessPicker::ccTouchMoved(CCTouch* touch, CCEvent*
//checkSliderPosition(touchLocation);
}
NS_CC_END
NS_CC_EXT_END

View File

@ -35,7 +35,7 @@
#include "CCControl.h"
#include "CCInvocation.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
class CC_DLL CCControlSaturationBrightnessPicker : public CCControl
{
@ -68,6 +68,6 @@ protected:
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -31,7 +31,7 @@
#include "CCTouch.h"
#include "CCDirector.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCControlSlider::~CCControlSlider()
{
@ -218,4 +218,4 @@ float CCControlSlider::valueForLocation(CCPoint location)
return m_minimumValue + percent * (m_maximumValue - m_minimumValue);
}
NS_CC_END
NS_CC_EXT_END

View File

@ -37,7 +37,7 @@
#define SLIDER_MARGIN_H 24
#define SLIDER_MARGIN_V 8
NS_CC_BEGIN
NS_CC_EXT_BEGIN
class CC_DLL CCControlSlider: public CCControl
{
@ -106,6 +106,6 @@ protected:
float valueForLocation(CCPoint location);
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -24,16 +24,9 @@
*/
#include "CCControlSwitch.h"
#include "CCPointExtension.h"
#include "CCLabelTTF.h"
#include "CCRenderTexture.h"
#include "CCTouch.h"
#include "CCDirector.h"
#include "ccShaders.h"
#include "CCActionTween.h"
NS_CC_BEGIN
#include "cocos2d.h"
NS_CC_EXT_BEGIN
// CCControlSwitchSprite
class CCControlSwitchSprite : public CCSprite, public CCActionTweenDelegate
@ -438,4 +431,4 @@ void CCControlSwitch::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
}
}
NS_CC_END
NS_CC_EXT_END

View File

@ -29,11 +29,13 @@
#include "CCControl.h"
NS_CC_BEGIN
namespace cocos2d { class CCSprite; }
namespace cocos2d { class CCLabelTTF; }
NS_CC_EXT_BEGIN
class CCControlSwitchSprite;
class CCSprite;
class CCLabelTTF;
/** @class CCControlSwitch Switch control for Cocos2D. */
class CC_DLL CCControlSwitch : public CCControl
@ -85,7 +87,7 @@ protected:
};
NS_CC_END
NS_CC_EXT_END
#endif /* __CCCONTROLSWITCH_H__ */

View File

@ -1,7 +1,7 @@
#include "CCControlUtils.h"
#include "CCPointExtension.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCSprite* CCControlUtils::addSpriteToTargetWithPosAndAnchor(const char* spriteName, CCNode * target, CCPoint pos, CCPoint anchor)
{
@ -146,4 +146,4 @@ CCRect CCControlUtils::CCRectUnion(const CCRect& src1, const CCRect& src2)
return result;
}
NS_CC_END
NS_CC_EXT_END

View File

@ -34,7 +34,7 @@
#include "CCSprite.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
typedef struct
{
@ -60,7 +60,7 @@ public:
CCColor3bObject(ccColor3B s_value):value(s_value){}
};
class CCControlUtils
class CC_DLL CCControlUtils
{
public:
static CCSprite* addSpriteToTargetWithPosAndAnchor(const char* spriteName, CCNode * target, CCPoint pos, CCPoint anchor);
@ -69,6 +69,6 @@ public:
static CCRect CCRectUnion(const CCRect& src1, const CCRect& src2);
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -1,6 +1,6 @@
#include "CCInvocation.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCInvocation::CCInvocation(CCObject* target, SEL_MenuHandler action, CCControlEvent controlEvent)
{
@ -17,4 +17,4 @@ void CCInvocation::invoke(CCObject* sender)
}
}
NS_CC_END
NS_CC_EXT_END

View File

@ -7,7 +7,7 @@
#include "CCObject.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
typedef unsigned int CCControlEvent;
@ -23,6 +23,6 @@ public:
void invoke(CCObject* sender);
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -6,7 +6,7 @@
using namespace std;
NS_CC_BEGIN
NS_CC_EXT_BEGIN
enum
{
@ -437,4 +437,4 @@ const ccColor3B& CCMenuPassive::getColor(void)
return m_tColor;
}
NS_CC_END
NS_CC_EXT_END

View File

@ -7,7 +7,7 @@
#include "CCControl.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
class CC_DLL CCMenuPassive : public CCLayer, public CCRGBAProtocol
{
@ -59,6 +59,6 @@ public:
virtual bool getIsOpacityModifyRGB(void) { return false;}
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -13,7 +13,7 @@
#include "CCSprite.h"
#include "CCPointExtension.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCScale9Sprite::CCScale9Sprite()
{
@ -461,4 +461,4 @@ bool CCScale9Sprite::getIsOpacityModifyRGB()
return m_bIsOpacityModifyRGB;
}
NS_CC_END
NS_CC_EXT_END

View File

@ -13,11 +13,11 @@
#include "CCProtocols.h"
NS_CC_BEGIN
namespace cocos2d { class CCSprite; }
namespace cocos2d { class CCSpriteBatchNode; }
namespace cocos2d { class CCSpriteFrame; }
class CCSprite;
class CCSpriteBatchNode;
class CCSpriteFrame;
NS_CC_EXT_BEGIN
enum positions
{
@ -276,6 +276,6 @@ public:
};
NS_CC_END
NS_CC_EXT_END
#endif // __CCScale9Sprite_H__

View File

@ -1,6 +1,6 @@
#include "CCSpacer.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
CCSpacer* CCSpacer::verticalSpacer(float space)
{
@ -20,4 +20,4 @@ CCSpacer* CCSpacer::horizontalSpacer(float space)
return pRet;
}
NS_CC_END
NS_CC_EXT_END

View File

@ -3,7 +3,7 @@
#include "CCLayer.h"
NS_CC_BEGIN
NS_CC_EXT_BEGIN
class CC_DLL CCSpacer: public CCLayer
{
@ -12,6 +12,6 @@ public:
static CCSpacer* horizontalSpacer(float space);
};
NS_CC_END
NS_CC_EXT_END
#endif

View File

@ -0,0 +1,42 @@
#ifndef __CCCONTROL_DEFINE_H__
#define __CCCONTROL_DEFINE_H__
NS_CC_EXT_BEGIN
typedef enum
{
PARENT_CENTER,
VERTICAL_TOP,
VERTICAL_BOTTOM,
HORIZONTAL_LEFT,
HORIZONTAL_RIGHT,
ABS_WITH_PIXEL,
ABS_WITH_PERCENT,
REF_PREV_X_INC,
REF_PREV_X_DEC,
REF_PREV_Y_INC,
REF_PREV_Y_DEC,
REL_FLOW
} LAYOUT_TYPE;
typedef struct
{
LAYOUT_TYPE t;
union
{
float pixel_val;
float percent_val;
} val;
} LayoutParamVal;
typedef struct
{
LayoutParamVal val_x;
LayoutParamVal val_y;
float padding;
bool wrap;
} LayoutParam;
NS_CC_EXT_END
#endif /* __CCCONTROL_DEFINE_H__ */

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,188 @@
#ifndef __CC_LIST_VIEW_H__
#define __CC_LIST_VIEW_H__
#include <time.h>
#include "platform.h"
#include <vector>
#include <string>
//#include "../lua/cocos2dx_support/CCLuaEngine.h"
#include "CCListViewCell.h"
NS_CC_EXT_BEGIN
class CC_DLL CCRange
{
public:
CCRange()
{
this->location = 0;
this->length = 0;
}
CCRange(unsigned int loc, unsigned int len)
{
this->location = loc;
this->length = len;
}
static unsigned int CCMaxRange(CCRange range)
{
return (range.location + range.length-1);
}
static bool CCLocationInRange(unsigned int loc, CCRange range)
{
return (loc - range.location <= range.length);
}
static bool CCEqualRanges(CCRange range1, CCRange range2) { return (range1.location == range2.location && range1.length == range2.length); }
unsigned int length;
unsigned int location;
};
#define CCRangeMake(__min__, __max__) CCRange((__min__), (__max__))
typedef enum
{
CCListViewSlideDirNone,
CCListViewSlideDirUp,
CCListViewSlideDirDown,
CCListViewSlideDirLeft,
CCListViewSlideDirRight,
} CCListViewSlideDir;
typedef enum
{
CCListViewStateWatting,
CCListViewStateTrackingTouch,
CCListViewStateEaseOut,
CCListViewStateFix,
CCListViewStateScroll,
} CCListViewState;
typedef enum
{
CCListViewModeHorizontal,
CCListViewModeVertical,
} CCListViewMode;
typedef struct _CCListViewProtrolData
{
unsigned int nNumberOfRows;
unsigned int nRow;
CCListViewCell *cell;
} CCListViewProtrolData;
class CC_DLL CCListViewDelegate
{
public :
CCListViewDelegate(){};
virtual ~CCListViewDelegate(){};
virtual void CCListView_numberOfCells(CCListView *listView, CCListViewProtrolData *data)=0;
virtual void CCListView_cellForRow(CCListView *listView, CCListViewProtrolData *data)=0;
virtual void CCListView_didClickCellAtRow(CCListView *listView, CCListViewProtrolData *data)=0;
virtual void CCListView_didScrollToRow(CCListView *listView, CCListViewProtrolData *data)=0;
};
class CC_DLL CCListView : public CCLayerColor
{
public:
virtual ~CCListView(void);
CCListView(void);
static CCListView* viewWithMode(CCListViewMode mode);
bool initWithMode(CCListViewMode mode);
void setDelegateName(const char* pszName);
void selectCellAtRow(unsigned int nRow);
void unselectCellAtRow(unsigned int nRow);
void scrollCellToFront(unsigned int nRow, bool bAnimated);
void scrollCellToBack(unsigned int nRow, bool bAnimated);
void reload(void);
void insertCellsAtRow(unsigned int nRow, unsigned int nCount);
void deleteCellsAtRow(unsigned int nRow, unsigned int nCount);
CCListViewCell *cellAtRow(unsigned int nRow);
CCListViewSlideDir getSlideDir(CCPoint ptTouchBegan, CCPoint ptTouchEnd);
inline CCListViewSlideDir getSlideDir(void) { return m_nSlideDir; }
inline CCListViewCellSeparatorStyle getSeparatorStyle(void) { return m_nSeparatorStyle; }
inline void setSeparatorStyle(CCListViewCellSeparatorStyle style) { m_nSeparatorStyle = style; }
inline CCListViewMode getMode(void) { return m_nMode; }
inline void setListViewParent(CCListView *pParent) { m_pListViewParent = pParent; }
inline CCListView *getListViewParent(void) { return m_pListViewParent; }
inline void setIsEnabled(bool bEnabled) { m_bIsEnabled = bEnabled; }
inline bool getIsEnabled(void) { return m_bIsEnabled; }
// un
void setDelegate(const CCListViewDelegate *pDelegate) { m_pDelegate = const_cast<CCListViewDelegate*>(pDelegate);}
void finishFix(void);
void finishScroll(void);
void finishEaseOut(void);
public:
virtual bool ccTouchBegan(CCTouch* touch, CCEvent* event);
virtual void ccTouchEnded(CCTouch* touch, CCEvent* event);
virtual void ccTouchCancelled(CCTouch *touch, CCEvent* event);
virtual void ccTouchMoved(CCTouch* touch, CCEvent* event);
virtual void onEnter(void);
virtual void onExit(void);
virtual void registerWithTouchDispatcher(void);
virtual void visit(void);
protected:
void displayVisibleRows(void);
CCListViewCell* appendRowToBack(unsigned int nRow);
CCListViewCell* appendRowToFront(unsigned int nRow);
void fixFirstRow(void);
void fixLastRow(void);
void easeOutWithDistance(float dis);
void clearUnvisibleRows(void);
int rowForTouch(cocos2d::CCTouch *touch);
bool isTouchInside(CCTouch *touch);
bool isFullFill(void);
void stopActionImmediately(void);
unsigned int triggerNumberOfCells(void);
CCListViewCell *triggerCellForRow(unsigned int nRow);
void triggerDidClickCellAtRow(unsigned int nRow);
void triggerDidScrollToRow(unsigned int nRow);
bool isMenuTouch(CCTouch *touch, CCNode *parent);
private:
CCListViewState m_nState;
CCListViewMode m_nMode;
CCListViewSlideDir m_nSlideDir;
CCListViewCellSeparatorStyle m_nSeparatorStyle;
unsigned int m_nNumberOfRows;
float m_fActionDuration;
clock_t m_timeTouchBegan;
CCRange m_drawedRows; //所有已绘制的cell
CCRange m_visibleRows; //所有可见的cell
CCPoint m_ptTouchBegan;
CCPoint m_ptTouchEnd;
CCPoint m_ptPanelOffset;
CCPoint m_ptDestination;
std::string m_strDeletegate;
CCListViewDelegate* m_pDelegate;
CCLayer* m_layerPanel;
CCListView* m_pListViewParent;
int m_nSelectedRow;
int m_nCurrentRow;
bool m_bIsEnabled;
bool m_bIsOnTouch;
};
NS_CC_EXT_END
#endif // __CC_LIST_VIEW_H__

View File

@ -0,0 +1,96 @@
#include "CCListView.h"
#include "CCListViewCell.h"
#include "cocos2d.h"
NS_CC_EXT_BEGIN
const int TOUCHBEGIN = 1;
const int TOUCHEND = 2;
const int TOUCHMOVING = 3;
const int TOUCHCANCELLED= 4;
/******************************************
**************Public Functions*************
*******************************************/
CCListViewCell::CCListViewCell(void)
:m_nSeparatorStyle(CCListViewCellSeparatorStyleNone)
,m_bIsSelected(false)
{
setIsTouchEnabled(true);
m_selectionColor = ccc4(0, 0, 255, 255);
m_separatorLineColor = ccc3(128, 128, 128);
}
CCListViewCell::~CCListViewCell(void)
{
}
CCListViewCell *CCListViewCell::node(void)
{
CCListViewCell *pRet = new CCListViewCell();
pRet->initWithColorWidthHeight(ccc4(255, 255, 255, 255), 0, 0);
pRet->autorelease();
return pRet;
}
void CCListViewCell::selected(void)
{
m_bIsSelected = true;
CCLayerColor::setColor(ccc3(m_selectionColor.r, m_selectionColor.g, m_selectionColor.b));
CCLayerColor::setOpacity(m_selectionColor.a);
}
void CCListViewCell::unselected(void)
{
m_bIsSelected = false;
CCLayerColor::setColor(ccc3(m_normalColor.r, m_normalColor.g, m_normalColor.b));
CCLayerColor::setOpacity(m_normalColor.a);
}
/******************************************
**************Virturl Functions************
*******************************************/
bool CCListViewCell::initWithColorWidthHeight(ccColor4B color, GLfloat width, GLfloat height)
{
this->m_normalColor = color;
return CCLayerColor::initWithColor(color, width, height);
}
void CCListViewCell::draw(void)
{
CCLayerColor::draw();
CCSize size = this->getContentSize();
CCListView *owner = this->getOwner();
if (CCListViewCellSeparatorStyleSingleLine == m_nSeparatorStyle)
{
glLineWidth(1.0f);
ccDrawColor4B(m_separatorLineColor.r, m_separatorLineColor.g, m_separatorLineColor.b, 255);
if (CCListViewModeHorizontal == owner->getMode())
{
ccDrawLine(CCPointMake(size.width, 0), CCPointMake(size.width, size.height));
}
else if (CCListViewModeVertical == owner->getMode())
{
ccDrawLine(CCPointMake(0, 0), CCPointMake(size.width, 0));
}
}
}
void CCListViewCell::setColor(ccColor3B var)
{
m_normalColor.r = var.r;
m_normalColor.g = var.g;
m_normalColor.b = var.b;
CCLayerColor::setColor(var);
}
void CCListViewCell::setOpacity(GLubyte var)
{
m_normalColor.a = var;
CCLayerColor::setOpacity(var);
}
NS_CC_EXT_END

View File

@ -0,0 +1,55 @@
#ifndef __CC_LIST_VIEW_CELL_H_
#define __CC_LIST_VIEW_CELL_H_
#include "CCControlDefine.h"
#include "CCLayer.h"
NS_CC_EXT_BEGIN
class CCListView;
typedef enum
{
CCListViewCellSeparatorStyleNone,
CCListViewCellSeparatorStyleSingleLine,
}CCListViewCellSeparatorStyle;
class CC_DLL CCListViewCell : public CCLayerColor
{
public:
CCListViewCell(void);
virtual ~CCListViewCell(void);
static CCListViewCell *node(void);
void selected(void);
void unselected(void);
inline CCListViewCellSeparatorStyle getSeparatorStyle(void) { return m_nSeparatorStyle; }
inline void setSeparatorStyle(CCListViewCellSeparatorStyle style) { m_nSeparatorStyle = style; }
inline ccColor4B getSelectionColor(void) { return m_selectionColor; }
inline void setSelectionColor(ccColor4B color) { m_selectionColor = color; }
inline ccColor3B getSeparatorLineColor(void) { return m_separatorLineColor; }
inline void setSeparatorLineColor(ccColor3B color) { m_separatorLineColor = color; }
public:
virtual bool initWithColorWidthHeight(ccColor4B color, GLfloat width, GLfloat height);
virtual void draw(void);
virtual void setColor(ccColor3B color);
virtual void setOpacity(GLubyte var);
private:
inline CCListView *getOwner(void) { return (CCListView*)(this->getParent()->getParent()); }
private:
CCListViewCellSeparatorStyle m_nSeparatorStyle;
bool m_bIsSelected;
ccColor4B m_selectionColor;
ccColor4B m_normalColor;
ccColor3B m_separatorLineColor;
};
NS_CC_EXT_END
#endif // __CC_LIST_VIEW_CELL_H_

View File

@ -28,7 +28,7 @@ THE SOFTWARE.
using namespace std;
NS_CC_BEGIN
NS_CC_EXT_BEGIN
static CCNotificationCenter *s_sharedNotifCenter = NULL;
@ -185,4 +185,4 @@ CCObject *CCNotificationObserver::getObject()
return m_object;
}
NS_CC_END
NS_CC_EXT_END

View File

@ -27,9 +27,10 @@ THE SOFTWARE.
#include "CCObject.h"
NS_CC_BEGIN
class CCArray;
namespace cocos2d { class CCArray; }
NS_CC_EXT_BEGIN
class CC_DLL CCNotificationCenter : public CCObject
{
@ -59,7 +60,7 @@ private:
//
// variables
//
CCArray *m_observers;
cocos2d::CCArray *m_observers;
};
class CC_DLL CCNotificationObserver : public CCObject
@ -79,6 +80,6 @@ private:
CC_PROPERTY_READONLY(CCObject *, m_object, Object);
};
NS_CC_END
NS_CC_EXT_END
#endif//__CCNOTIFICATIONCENTER_H__

View File

@ -0,0 +1,342 @@
#include "CCTextureWatcher.h"
#include "cocos2d.h"
using namespace std;
NS_CC_EXT_BEGIN
#define NUM_PER_PAGE 4
CCTextureWatcher::CCTextureWatcher()
{
m_bHide = false;
m_nCurrnetPage = 1;
m_nTotalPage = 0;
m_bFresh = true;
m_pTextures = NULL;
m_pszString = NULL;
m_pLayer = CCLayerColor::layerWithColor(ccc4(128, 128, 128, 128));
m_pLayer->retain();
// layer
CCSize size = CCDirector::sharedDirector()->getWinSize();
size.height *= 0.6;
m_pLayer->setContentSize(size);
// 屏蔽点击事件的menu
//*
CCLabelTTF *label = CCLabelTTF::labelWithString(" ", size, CCTextAlignmentLeft, "Arial", 12);
CCMenuItemLabel *menuItem = CCMenuItemLabel::itemWithLabel(label);
menuItem->setAnchorPoint(CCPoint(0, 0));
menuItem->setPosition(CCPoint(0, 0));
CCMenu *menu = CCMenu::menuWithItem(menuItem);
menu->setAnchorPoint(CCPoint(0, 0));
menu->setPosition(CCPoint(0, 0));
m_pLayer->addChild(menu);
//*/
// list
CCListView *list = CCListView::viewWithMode(CCListViewModeHorizontal);
list->setContentSize(size);
list->setDelegate(this);
list->setSeparatorStyle(CCListViewCellSeparatorStyleNone);
m_pLayer->addChild(list);
m_pList = list;
// 隐藏按钮
CCLabelTTF *labelHide = CCLabelTTF::labelWithString("Hide ", "Arial", 24);
labelHide->setColor(ccc3(255, 0, 0));
CCMenuItemLabel *menuItem2 = CCMenuItemLabel::itemWithLabel(labelHide, this, menu_selector(CCTextureWatcher::actionHide));
menuItem2->setAnchorPoint(CCPoint(0, 0));
menuItem2->setPosition(CCPoint(0, 0));
CCMenu *menu2 = CCMenu::menuWithItem(menuItem2);
menu2->setAnchorPoint(CCPoint(0, 0));
menu2->setPosition(CCPoint(size.width - menuItem2->getContentSize().width, 0));
m_labelHide = labelHide;
m_menuHide = menu2;
m_menuHide->retain();
// 更新按钮
CCLabelTTF *labelFresh = CCLabelTTF::labelWithString("Fresh", "Arial", 24);
labelFresh->setColor(ccc3(255, 0, 0));
CCMenuItemLabel *menuItem1 = CCMenuItemLabel::itemWithLabel(labelFresh, this, menu_selector(CCTextureWatcher::actionFresh));
menuItem1->setAnchorPoint(CCPoint(0, 0));
menuItem1->setPosition(CCPoint(0, 0));
CCMenu *menu1 = CCMenu::menuWithItem(menuItem1);
menu1->setAnchorPoint(CCPoint(0, 0));
menu1->setPosition(CCPoint(size.width - menuItem1->getContentSize().width - menuItem2->getContentSize().width * 1.5, 0));
m_pLayer->addChild(menu1);
// label page
m_labelPage = CCLabelTTF::labelWithString(" ", CCSizeMake(size.width * 0.1, labelFresh->getContentSize().height), CCTextAlignmentCenter, "Arial", 16);
m_labelPage->setAnchorPoint(CCPoint(0.5, 0));
m_labelPage->setPosition(CCPoint(size.width/2.0, 0));
m_pLayer->addChild(m_labelPage, 0);
}
CCTextureWatcher::~CCTextureWatcher()
{
if (m_menuHide)
{
m_menuHide->removeFromParentAndCleanup(true);
m_menuHide->release();
}
if (m_pLayer)
{
m_pLayer->removeFromParentAndCleanup(true);
}
if (m_pTextures) m_pTextures->release();
if (m_pszString) delete []m_pszString;
}
void CCTextureWatcher::actionFresh(CCObject* object)
{
CCTextureWatcher::sharedTextureWatcher()->fresh();
}
void CCTextureWatcher::actionHide(CCObject *object)
{
CCTextureWatcher::sharedTextureWatcher()->hide();
}
void CCTextureWatcher::fresh()
{
m_nCurrnetPage = 1;
m_bFresh = true;
}
void CCTextureWatcher::hide()
{
m_bHide = !m_bHide;
if (m_bHide)
{
m_labelHide->setString("Show");
m_pLayer->setPosition(CCPoint(0, -m_pLayer->getContentSize().height));
}
else
{
m_labelHide->setString("Hide");
m_pLayer->setPosition(CCPoint(0, 0));
}
}
void CCTextureWatcher::dovisit()
{
if (m_bFresh)
{
if (m_pTextures)
{
m_pTextures->removeAllObjects();
m_pTextures->release();
}
CCTextureCache::sharedTextureCache()->removeUnusedTextures();
m_pTextures = CCTextureCache::sharedTextureCache()->snapshotTextures();
m_nTotalPage = (m_pTextures->count() + NUM_PER_PAGE - 1) / NUM_PER_PAGE;
if (m_pTextures->count() > 0)
{
m_bFresh = false;
m_pList->reload();
}
}
CCNode *pParent = m_pLayer->getParent();
if (pParent)
{
if (pParent != CCDirector::sharedDirector()->getRunningScene())
{
pParent->removeChild(m_pLayer, true);
CCDirector::sharedDirector()->getRunningScene()->addChild(m_pLayer, 9998);
m_bFresh = true;
}
}
else
{
CCDirector::sharedDirector()->getRunningScene()->addChild(m_pLayer, 9998);
}
pParent = m_menuHide->getParent();
if (pParent)
{
if (pParent != CCDirector::sharedDirector()->getRunningScene())
{
pParent->removeChild(m_menuHide, true);
CCDirector::sharedDirector()->getRunningScene()->addChild(m_menuHide, 9999);
}
}
else
{
CCDirector::sharedDirector()->getRunningScene()->addChild(m_menuHide, 9999);
}
}
void CCTextureWatcher::visit(void* pSender)
{
CCTextureWatcher *wartcher = (CCTextureWatcher*)pSender;
wartcher->dovisit();
}
static CCTextureWatcher *g_sharedTextureWatcher = NULL;
CCTextureWatcher* CCTextureWatcher::sharedTextureWatcher()
{
if (!g_sharedTextureWatcher)
{
g_sharedTextureWatcher = new CCTextureWatcher();
}
return g_sharedTextureWatcher;
}
void CCTextureWatcher::purgeTextureWatcher()
{
if (g_sharedTextureWatcher != NULL)
{
CC_SAFE_RELEASE_NULL(g_sharedTextureWatcher);
}
}
void CCTextureWatcher::setDisplayWatcher(bool bDisplayWatcher)
{
m_bDisplayWatcher = bDisplayWatcher;
if (m_bDisplayWatcher)
{
if (m_pszString == NULL)
{
m_pszString = new char[64];
}
CCDirector::sharedDirector()->setWatcherCallbackFun(this, &CCTextureWatcher::visit);
}
else
{
CCDirector::sharedDirector()->setWatcherCallbackFun(NULL, NULL);
purgeTextureWatcher();
}
}
void CCTextureWatcher::CCListView_numberOfCells(CCListView *listView, CCListViewProtrolData *data)
{
data->nNumberOfRows = m_nTotalPage;
}
void CCTextureWatcher::CCListView_cellForRow(CCListView *listView, CCListViewProtrolData *data)
{
m_nCurrnetPage = data->nRow + 1;
CCListViewCell *cell = CCListViewCell::node();
cell->setOpacity(0);
cell->setContentSize(m_pList->getContentSize());
cell->setSelectionColor(ccc4(0, 0, 0, 0));
data->cell = cell;
CCSize listItemSize = CCSize(m_pList->getContentSize().width / NUM_PER_PAGE, m_pList->getContentSize().height);
CCSize size = CCSize(listItemSize.width * 0.9, listItemSize.height * 0.6);
sprintf(m_pszString, "%d/%d", m_nCurrnetPage, m_nTotalPage);
m_labelPage->setString(m_pszString);
float offX = 0, offY = 0, offsetX = 0, offsetY = 0;
CC_UNUSED_PARAM(offsetY);
int nCount = 0;
int nStart = (m_nCurrnetPage - 1) * NUM_PER_PAGE;
int nEnd = nStart + NUM_PER_PAGE;
CCDictElement* pElement = NULL;
CCDICT_FOREACH(m_pTextures, pElement)
{
if (nCount >= nStart && nCount < nEnd)
{
string key = pElement->getStrKey();
CCTexture2D* textrue = (CCTexture2D*)pElement->getObject();
//textrue = m_pTextures->objectForKey(*it);
if (textrue)
{
// 引用数
sprintf(m_pszString, "[%d]", textrue->retainCount() - 2);
CCLabelTTF *labelCount = CCLabelTTF::labelWithString(m_pszString, "Arial", 16);
if (textrue->retainCount() - 2 > 0)
{
labelCount->setColor(ccc3(0, 255, 0));
}
else
{
labelCount->setColor(ccc3(255, 0, 0));
}
offX = offsetX + listItemSize.width * 0.5 - labelCount->getContentSize().width * 0.5;
offY = (listItemSize.height - size.height) * 0.5 - labelCount->getContentSize().height;
labelCount->setPosition(CCPoint(offX, offY));
labelCount->setAnchorPoint(CCPoint(0, 0));
cell->addChild(labelCount);
// 大小
sprintf(m_pszString, "%.0f*%.0f", textrue->getContentSize().width, textrue->getContentSize().height);
CCLabelTTF *labelSize = CCLabelTTF::labelWithString(m_pszString, "Arial", 16);
offX = offsetX + listItemSize.width * 0.5;
offY = (listItemSize.height - size.height) * 0.5 + size.height;
labelSize->setPosition(CCPoint(offX, offY));
labelSize->setAnchorPoint(CCPoint(0.5, 0));
cell->addChild(labelSize);
// 名称
int len = key.length();
int pos = 0;
#if defined(ND_MAC) || defined(ND_IPHONE)
pos = key.rfind('/') + 1;
#else
pos = key.rfind('\\') + 1;
int pos2 = key.rfind('/') + 1;
pos = pos > pos2 ? pos : pos2;
#endif
string name = key.substr(pos, len - pos);
sprintf(m_pszString, "%s", name.c_str());
CCSize dimensions = CCSizeMake(listItemSize.width * 0.9, labelSize->getContentSize().height);
CCLabelTTF *labelName = CCLabelTTF::labelWithString(m_pszString, dimensions, CCTextAlignmentCenter, "Arial", 16);
offX = offsetX + listItemSize.width * 0.5;
offY = offY + labelName->getContentSize().height;
labelName->setPosition(CCPoint(offX, offY));
labelName->setAnchorPoint(CCPoint(0.5, 0));
cell->addChild(labelName);
CCSprite *sprite = CCSprite::spriteWithTexture(textrue);
sprite->setAnchorPoint(CCPoint(0, 0));
CCSize spriteSize = sprite->getContentSize();
float scale;
if (spriteSize.width < size.width && spriteSize.height < size.height)
{
scale = 1;
}
else if (spriteSize.width * size.height >= spriteSize.height * size.width)
{
scale = size.width / spriteSize.width;
}
else
{
scale = size.height / spriteSize.height;
}
sprite->setScale(scale);
spriteSize.width *= scale;
spriteSize.height *= scale;
offX = offsetX + (listItemSize.width - spriteSize.width) * 0.5;
offY = (listItemSize.height - spriteSize.height) * 0.5;
sprite->setPosition(CCPoint(offX, offY));
cell->addChild(sprite);
offsetX += listItemSize.width;
}
}
++nCount;
}
}
void CCTextureWatcher::CCListView_didClickCellAtRow(CCListView *listView, CCListViewProtrolData *data)
{
}
void CCTextureWatcher::CCListView_didScrollToRow(CCListView *listView, CCListViewProtrolData *data)
{
}
NS_CC_EXT_END

View File

@ -0,0 +1,53 @@
#ifndef __CCMEMLAYER_H__
#define __CCMEMLAYER_H__
#include "extensions/CCListView/CCListView.h"
namespace cocos2d { class CCDictionary; }
namespace cocos2d { class CCLabelTTF; }
namespace cocos2d { class CCMenu; }
namespace cocos2d { class CCLayerColor; }
NS_CC_EXT_BEGIN
class CC_DLL CCTextureWatcher :public CCObject, public CCListViewDelegate
{
private:
CCTextureWatcher();
public:
virtual ~CCTextureWatcher();
static CCTextureWatcher* sharedTextureWatcher();
static void purgeTextureWatcher();
void setDisplayWatcher(bool bDisplayWatcher);
void fresh(void);
protected:
void actionFresh(CCObject* object);
void actionHide(CCObject* object);
void hide(void);
void dovisit(void);
static void visit(void* pSender);
protected:
virtual void CCListView_numberOfCells(CCListView *listView, CCListViewProtrolData *data);
virtual void CCListView_cellForRow(CCListView *listView, CCListViewProtrolData *data);
virtual void CCListView_didClickCellAtRow(CCListView *listView, CCListViewProtrolData *data);
virtual void CCListView_didScrollToRow(CCListView *listView, CCListViewProtrolData *data);
private:
bool m_bDisplayWatcher;
bool m_bFresh;
bool m_bHide;
CCDictionary *m_pTextures;
char *m_pszString;
int m_nCurrnetPage;
int m_nTotalPage;
CCLabelTTF *m_labelHide;
CCLabelTTF *m_labelPage;
CCMenu *m_menuHide;
CCLayerColor *m_pLayer;
CCListView *m_pList;
};
NS_CC_EXT_END
#endif

View File

@ -3,5 +3,7 @@
#include "extensions/CCNotificationCenter/CCNotificationCenter.h"
#include "extensions/CCControlExtension/CCControlExtensions.h"
#include "extensions/CCListView/CCListView.h"
#include "extensions/CCTextureWatcher/CCTextureWatcher.h"
#endif /* __COCOS2DEXT_H__ */

View File

@ -67,7 +67,7 @@ bool CCParticleSystemQuad::initWithTotalParticles(unsigned int numberOfParticles
// Need to listen the event only when not use batchnode, because it will use VBO
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
extension::CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
callfuncO_selector(CCParticleSystemQuad::listenBackToForeground),
EVNET_COME_TO_FOREGROUND,
NULL);
@ -99,7 +99,7 @@ CCParticleSystemQuad::~CCParticleSystemQuad()
#endif
}
CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, EVNET_COME_TO_FOREGROUND);
extension::CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, EVNET_COME_TO_FOREGROUND);
}
// implementation CCParticleSystemQuad

View File

@ -157,15 +157,6 @@ public:
static void setIsPopupNotify(bool bNotify);
static bool getIsPopupNotify();
///////////////////////////////////////////////////
// interfaces on wophone
///////////////////////////////////////////////////
/**
@brief Set the resource zip file name
@param pszZipFileName The relative path of the .zip file
*/
static void setResource(const char* pszZipFileName);
///////////////////////////////////////////////////
// interfaces on ios
///////////////////////////////////////////////////

View File

@ -59,10 +59,16 @@ It's new in cocos2d-x since v0.99.5
#define NS_CC_BEGIN namespace cocos2d {
#define NS_CC_END }
#define USING_NS_CC using namespace cocos2d
#define NS_CC_EXT_BEGIN namespace cocos2d { namespace extension {
#define NS_CC_EXT_END }}
#define USING_NS_CC_EXT using namespace cocos2d::extension
#else
#define NS_CC_BEGIN
#define NS_CC_END
#define USING_NS_CC
#define NS_CC_EXT_BEGIN
#define NS_CC_EXT_END
#define USING_NS_CC_EXT
#endif
/** CC_PROPERTY_READONLY is used to declare a protected variable.

View File

@ -118,11 +118,6 @@ unsigned char* CCFileUtils::getFileData(const char* pszFileName, const char* psz
return pData;
}
void CCFileUtils::setResource(const char* pszZipFileName)
{
CCAssert(0, "Have not implement!");
}
int CCFileUtils::ccLoadFileIntoMemory(const char *filename, unsigned char **out)
{
CCAssert(0, "Have not implement!");

View File

@ -475,10 +475,6 @@ unsigned char* CCFileUtils::getFileData(const char* pszFileName, const char* psz
}
return pBuffer;
}
void CCFileUtils::setResource(const char* pszZipFileName)
{
CCAssert(0, "Have not implement!");
}
// notification support when getFileData from a invalid file
static bool s_bPopupNotify = true;

View File

@ -193,12 +193,6 @@ unsigned char* CCFileUtils::getFileData(const char* pszFileName, const char* psz
return pBuffer;
}
void CCFileUtils::setResource(const char* pszZipFileName)
{
CC_UNUSED_PARAM(pszZipFileName);
CCAssert(0, "Have not implement!");
}
string CCFileUtils::getWriteablePath()
{
// return the path that the exe file saved in

View File

@ -1195,6 +1195,42 @@
>
</File>
</Filter>
<Filter
Name="CCTextureWatcher"
>
<File
RelativePath="..\extensions\CCTextureWatcher\CCTextureWatcher.cpp"
>
</File>
<File
RelativePath="..\extensions\CCTextureWatcher\CCTextureWatcher.h"
>
</File>
</Filter>
<Filter
Name="CCListView"
>
<File
RelativePath="..\extensions\CCListView\CCControlDefine.h"
>
</File>
<File
RelativePath="..\extensions\CCListView\CCListView.cpp"
>
</File>
<File
RelativePath="..\extensions\CCListView\CCListView.h"
>
</File>
<File
RelativePath="..\extensions\CCListView\CCListViewCell.cpp"
>
</File>
<File
RelativePath="..\extensions\CCListView\CCListViewCell.h"
>
</File>
</Filter>
</Filter>
<Filter
Name="kazmath"

View File

@ -64,7 +64,7 @@ CCTextureAtlas::~CCTextureAtlas()
#endif
CC_SAFE_RELEASE(m_pTexture);
CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, EVNET_COME_TO_FOREGROUND);
extension::CCNotificationCenter::sharedNotificationCenter()->removeObserver(this, EVNET_COME_TO_FOREGROUND);
}
unsigned int CCTextureAtlas::getTotalQuads()
@ -177,7 +177,7 @@ bool CCTextureAtlas::initWithTexture(CCTexture2D *texture, unsigned int capacity
memset( m_pIndices, 0, m_uCapacity * 6 * sizeof(GLushort) );
// listen the event when app go to background
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
extension::CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
callfuncO_selector(CCTextureAtlas::listenBackToForeground),
EVNET_COME_TO_FOREGROUND,
NULL);

View File

@ -195,6 +195,17 @@ const char* CCTextureCache::description()
return CCString::stringWithFormat("<CCTextureCache | Number of textures = %u>", m_pTextures->count())->getCString();
}
CCDictionary* CCTextureCache::snapshotTextures()
{
CCDictionary* pRet = new CCDictionary();
CCDictElement* pElement = NULL;
CCDICT_FOREACH(m_pTextures, pElement)
{
pRet->setObject(pElement->getObject(), pElement->getStrKey());
}
return pRet;
}
void CCTextureCache::addImageAsync(const char *path, CCObject *target, SEL_CallFuncO selector)
{
CCAssert(path != NULL, "TextureCache: fileimage MUST not be NULL");

View File

@ -65,6 +65,8 @@ public:
const char* description(void);
CCDictionary* snapshotTextures();
/** Retruns ths shared instance of the cache */
static CCTextureCache * sharedTextureCache();

View File

@ -1,81 +0,0 @@
set fso = Wscript.CreateObject("Scripting.FileSystemObject")
dim szPrompt, msgRet
szPrompt = "Prompt"
function ReplaceFileContent(fileName, oldStr, newStr)
set f = fso.opentextfile(fileName)
s = replace(f.readall, oldStr, newStr)
f.close
set r = fso.opentextfile(fileName, 2, true)
r.write s
end function
function CopyFolder(srcFolder, desFolder)
if (fso.FolderExists(desFolder)) then
'msgbox("none:"+srcFolder+":"+desFolder)
'If the desFolder exist, do nothing.
else
CopyFolder = fso.CopyFolder(srcFolder, desFolder)
end if
end function
function ConfigureProject()
dim szProjectName
szProjectName = Inputbox("Please Input Project Name:", szPrompt)
if szProjectName = "" then
Wscript.quit
end if
if (0 = strcomp(szProjectName, "HelloWorld", 1) or 0 = strcomp(szProjectName, "tests", 1)) then
msgRet = msgbox("Can not create a project named with "+szProjectName+", Please input again!", 1, szPrompt)
if (msgRet = 1) then
call ConfigureProject
end if
Wscript.quit
end if
if (fso.FolderExists(szProjectName)) then
else
fso.CreateFolder(szProjectName)
end if
dim badaFolder
badaFolder = szProjectName + "\bada"
if (fso.FolderExists(badaFolder)) then
msgRet = msgbox("The '"+szProjectName+"' project exists, can't override! Please input again!", 1, szPrompt)
if (msgRet = 1) then
call ConfigureProject
end if
Wcript.quit
end if
dim szSrcClass, szSrcBada, szSrcResource
dim szDesClass, szDesBada, szDesResource
szSrcClass = "HelloWorld\Classes"
szSrcBada = "HelloWorld\bada"
szSrcResource = "HelloWorld\Resources"
szDesClass = szProjectName+"\Classes"
szDesBada = szProjectName+"\bada"
szDesResource = szProjectName+"\Resources"
call CopyFolder(szSrcClass, szDesClass)
call CopyFolder(szSrcBada, szDesBada)
call CopyFolder(szSrcResource, szDesResource)
dim i
for i=1 to 2
call ReplaceFileContent(szProjectName+"\bada\sdk"+cstr(i)+".0\application.xml", "HelloWorld", szProjectName)
call ReplaceFileContent(szProjectName+"\bada\sdk"+cstr(i)+".0\.project", "HelloWorld", szProjectName)
call ReplaceFileContent(szProjectName+"\bada\sdk"+cstr(i)+".0\.cproject", "HelloWorld", szProjectName)
next
call msgbox("Congratulations, the '"+szProjectName+"' project have been created successfully, please use Bada IDE to import the project!", 0, szPrompt)
end function
call ConfigureProject
Wscript.quit

View File

@ -1,9 +0,0 @@
#!/bin/bash
# This script should be called by create-android-project.bat
# or should be runned in linux shell. It can not be runned under
# cygwin.
# Don't modify the script until you know what you do.
# set environment paramters
bash `pwd`/create-android-project.sh -linux $@

View File

@ -1,83 +0,0 @@
#!/bin/sh
HELLOWORLD_ROOT=`pwd`/HelloWorld
# make directory qnx and copy all files and directories into it
copy_qnx_folder(){
if [ -d $PROJECT_DIR/qnx ]; then
echo "The '$PROJECT_NAME' project exists, can't override! Please input again!"
create_qnx_project
exit
fi
mkdir $PROJECT_DIR/qnx
echo $HELLOWORLD_ROOT
for file in `ls -a $HELLOWORLD_ROOT/qnx | grep -E '\.(project|cproject|xml|png|cpp)' `
do
file=$HELLOWORLD_ROOT/qnx/$file
if [ -f $file ];then
#echo $file
cp $file $PROJECT_DIR/qnx
fi
done
}
copy_cpp_h_from_helloworld(){
if [ -d $PROJECT_DIR/Classes ]; then
echo "Classes folder exists, skip copying Classes folder!"
else
mkdir $PROJECT_DIR/Classes
for file in `ls $HELLOWORLD_ROOT/Classes/* | grep -E '.(cpp|h|mk)' `
do
if [ -f $file ];then
#echo $file
cp $file $PROJECT_DIR/Classes
fi
done
fi
}
# copy resources
copy_resouces(){
if [ -d $PROJECT_DIR/Resources ]; then
echo "Resources folder exists, skip copying Resources folder!"
else
mkdir $PROJECT_DIR/Resources
for file in $HELLOWORLD_ROOT/Resources/*
do
#echo $file
cp $file $PROJECT_DIR/Resources
done
fi
}
# replace string
modify_file_content(){
# here should use # instead of /, why??
sed "s#HelloWorld#$PROJECT_NAME#" $PROJECT_DIR/qnx/$1 > $PROJECT_DIR/qnx/tmp.txt
rm $PROJECT_DIR/qnx/$1
mv $PROJECT_DIR/qnx/tmp.txt $PROJECT_DIR/qnx/$1
}
create_qnx_project(){
echo "Please input your project name:"
read PROJECT_NAME
PROJECT_DIR=`pwd`/$PROJECT_NAME
# check if PROJECT_DIR is exist
if [ -d $PROJECT_DIR ]; then
echo ""
else
mkdir $PROJECT_DIR
fi
copy_qnx_folder
modify_file_content .project
modify_file_content .cproject
modify_file_content bar-descriptor.xml
copy_cpp_h_from_helloworld
copy_resouces
echo "Congratulations, the '$PROJECT_NAME' project have been created successfully, please use QNX IDE to import the project!"
}
create_qnx_project

View File

@ -1,78 +0,0 @@
set fso = Wscript.CreateObject("Scripting.FileSystemObject")
dim szPrompt, msgRet
szPrompt = "Prompt"
function ReplaceFileContent(fileName, oldStr, newStr)
set f = fso.opentextfile(fileName)
s = replace(f.readall, oldStr, newStr)
f.close
set r = fso.opentextfile(fileName, 2, true)
r.write s
end function
function CopyFolder(srcFolder, desFolder)
if (fso.FolderExists(desFolder)) then
'msgbox("none:"+srcFolder+":"+desFolder)
'If the desFolder exist, do nothing.
else
CopyFolder = fso.CopyFolder(srcFolder, desFolder)
end if
end function
function ConfigureProject()
dim szProjectName
szProjectName = Inputbox("Please Input Project Name:", szPrompt)
if szProjectName = "" then
Wscript.quit
end if
if (0 = strcomp(szProjectName, "HelloWorld", 1) or 0 = strcomp(szProjectName, "tests", 1)) then
msgRet = msgbox("Can not create a project named with "+szProjectName+", Please input again!", 1, szPrompt)
if (msgRet = 1) then
call ConfigureProject
end if
Wscript.quit
end if
if (fso.FolderExists(szProjectName)) then
else
fso.CreateFolder(szProjectName)
end if
dim qnxFolder
qnxFolder = szProjectName + "\qnx"
if (fso.FolderExists(qnxFolder)) then
msgRet = msgbox("The '"+szProjectName+"' project exists, can't override! Please input again!", 1, szPrompt)
if (msgRet = 1) then
call ConfigureProject
end if
Wcript.quit
end if
dim szSrcClass, szSrcQnx, szSrcResource
dim szDesClass, szDesQnx, szDesResource
szSrcClass = "HelloWorld\Classes"
szSrcQnx = "HelloWorld\qnx"
szSrcResource = "HelloWorld\Resources"
szDesClass = szProjectName+"\Classes"
szDesQnx = szProjectName+"\qnx"
szDesResource = szProjectName+"\Resources"
call CopyFolder(szSrcClass, szDesClass)
call CopyFolder(szSrcQnx, szDesQnx)
call CopyFolder(szSrcResource, szDesResource)
call ReplaceFileContent(szProjectName+"\qnx\bar-descriptor.xml", "HelloWorld", szProjectName)
call ReplaceFileContent(szProjectName+"\qnx\.project", "HelloWorld", szProjectName)
call ReplaceFileContent(szProjectName+"\qnx\.cproject", "HelloWorld", szProjectName)
call msgbox("Congratulations, the '"+szProjectName+"' project have been created successfully, please use QNX IDE to import the project!", 0, szPrompt)
end function
call ConfigureProject
Wscript.quit

View File

@ -47,11 +47,6 @@ bool AppDelegate::initInstance()
// if you want to use auto-scale, please enable view->create(320,480) in main.cpp
#endif // CC_PLATFORM_ANDROID
#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
// MaxAksenov said it's NOT a very elegant solution. I agree, haha
CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
#endif
bRet = true;
} while (0);
return bRet;
@ -70,7 +65,7 @@ bool AppDelegate::applicationDidFinishLaunching()
// pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
// turn on display FPS
pDirector->setDisplayFPS(true);
pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);

View File

@ -34,7 +34,7 @@ bool HelloWorld::init()
// you may modify it.
// add a "close" icon to exit the progress. it's an autorelease object
CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
CCMenuItemImage *pCloseItem = CCMenuItemImage::itemWithNormalImage(
"CloseNormal.png",
"CloseSelected.png",
this,

View File

@ -29,7 +29,7 @@ static AppDelegate s_sharedApplication;
window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
pixelFormat: kEAGLColorFormatRGBA8
depthFormat: GL_DEPTH_COMPONENT16_OES
depthFormat: GL_DEPTH_COMPONENT16
preserveBackbuffer: NO
sharegroup: nil
multiSampling: NO

View File

@ -47,11 +47,6 @@ bool AppDelegate::initInstance()
// if you want to use auto-scale, please enable view->create(320,480) in main.cpp
#endif // CC_PLATFORM_ANDROID
#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
// MaxAksenov said it's NOT a very elegant solution. I agree, haha
CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
#endif
bRet = true;
} while (0);
return bRet;
@ -70,7 +65,7 @@ bool AppDelegate::applicationDidFinishLaunching()
// pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
// turn on display FPS
pDirector->setDisplayFPS(true);
pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);

View File

@ -12,87 +12,84 @@ using namespace cocos2d;
using namespace CocosDenshion;
#define PTM_RATIO 32
enum
enum {
kTagParentNode = 1,
};
PhysicsSprite::PhysicsSprite()
: m_pBody(NULL)
{
kTagTileMap = 1,
kTagSpriteManager = 1,
kTagAnimation1 = 1,
};
}
void PhysicsSprite::setPhysicsBody(b2Body * body)
{
m_pBody = body;
}
// this method will only get called if the sprite is batched.
// return YES if the physics values (angles, position ) changed
// If you return NO, then nodeToParentTransform won't be called.
bool PhysicsSprite::isDirty(void)
{
return true;
}
// returns the transform matrix according the Chipmunk Body values
CCAffineTransform PhysicsSprite::nodeToParentTransform(void)
{
b2Vec2 pos = m_pBody->GetPosition();
float x = pos.x * PTM_RATIO;
float y = pos.y * PTM_RATIO;
if ( !getIsRelativeAnchorPoint() ) {
x += m_tAnchorPointInPoints.x;
y += m_tAnchorPointInPoints.y;
}
// Make matrix
float radians = m_pBody->GetAngle();
float c = cosf(radians);
float s = sinf(radians);
if( ! CCPoint::CCPointEqualToPoint(m_tAnchorPointInPoints, CCPointZero) ){
x += c*-m_tAnchorPointInPoints.x + -s*-m_tAnchorPointInPoints.y;
y += s*-m_tAnchorPointInPoints.x + c*-m_tAnchorPointInPoints.y;
}
// Rot, Translate Matrix
m_tTransform = CCAffineTransformMake( c, s,
-s, c,
x, y );
return m_tTransform;
}
HelloWorld::HelloWorld()
{
setIsTouchEnabled( true );
setIsAccelerometerEnabled( true );
CCSize screenSize = CCDirector::sharedDirector()->getWinSize();
//UXLOG(L"Screen width %0.2f screen height %0.2f",screenSize.width,screenSize.height);
// Define the gravity vector.
b2Vec2 gravity;
gravity.Set(0.0f, -10.0f);
// Do we want to let bodies sleep?
bool doSleep = true;
// Construct a world object, which will hold and simulate the rigid bodies.
world = new b2World(gravity);
world->SetAllowSleeping(doSleep);
world->SetContinuousPhysics(true);
/*
m_debugDraw = new GLESDebugDraw( PTM_RATIO );
world->SetDebugDraw(m_debugDraw);
uint flags = 0;
flags += b2DebugDraw::e_shapeBit;
flags += b2DebugDraw::e_jointBit;
flags += b2DebugDraw::e_aabbBit;
flags += b2DebugDraw::e_pairBit;
flags += b2DebugDraw::e_centerOfMassBit;
m_debugDraw->SetFlags(flags);
*/
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(screenSize.width/2/PTM_RATIO,
screenSize.height/2/PTM_RATIO); // bottom-left corner
// Call the body factory which allocates memory for the ground body
// from a pool and creates the ground box shape (also from a pool).
// The body is also added to the world.
b2Body* groundBody = world->CreateBody(&groundBodyDef);
// Define the ground box shape.
b2PolygonShape groundBox;
// bottom
groundBox.SetAsBox(screenSize.width/2/PTM_RATIO, 0, b2Vec2(0, -screenSize.height/2/PTM_RATIO), 0);
groundBody->CreateFixture(&groundBox, 0);
// top
groundBox.SetAsBox(screenSize.width/2/PTM_RATIO, 0, b2Vec2(0, screenSize.height/2/PTM_RATIO), 0);
groundBody->CreateFixture(&groundBox, 0);
// left
groundBox.SetAsBox(0, screenSize.height/2/PTM_RATIO, b2Vec2(-screenSize.width/2/PTM_RATIO, 0), 0);
groundBody->CreateFixture(&groundBox, 0);
// right
groundBox.SetAsBox(0, screenSize.height/2/PTM_RATIO, b2Vec2(screenSize.width/2/PTM_RATIO, 0), 0);
groundBody->CreateFixture(&groundBox, 0);
//Set up sprite
CCSpriteBatchNode *mgr = CCSpriteBatchNode::batchNodeWithFile("blocks.png", 150);
addChild(mgr, 0, kTagSpriteManager);
addNewSpriteWithCoords( CCPointMake(screenSize.width/2, screenSize.height/2) );
CCSize s = CCDirector::sharedDirector()->getWinSize();
// init physics
this->initPhysics();
CCSpriteBatchNode *parent = CCSpriteBatchNode::batchNodeWithFile("blocks.png", 100);
m_pSpriteTexture = parent->getTexture();
addChild(parent, 0, kTagParentNode);
addNewSpriteAtPosition(ccp(s.width/2, s.height/2));
CCLabelTTF *label = CCLabelTTF::labelWithString("Tap screen", "Marker Felt", 32);
addChild(label, 0);
label->setColor( ccc3(0,0,255) );
label->setPosition( CCPointMake( screenSize.width/2, screenSize.height-50) );
label->setColor(ccc3(0,0,255));
label->setPosition(ccp( s.width/2, s.height-50));
schedule( schedule_selector(HelloWorld::tick) );
scheduleUpdate();
}
HelloWorld::~HelloWorld()
@ -103,35 +100,94 @@ HelloWorld::~HelloWorld()
//delete m_debugDraw;
}
void HelloWorld::draw()
void HelloWorld::initPhysics()
{
// Default GL states: GL_TEXTURE_2D, GL_VERTEX_ARRAY, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
// Needed states: GL_VERTEX_ARRAY,
// Unneeded states: GL_TEXTURE_2D, GL_COLOR_ARRAY, GL_TEXTURE_COORD_ARRAY
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
//world->DrawDebugData();
// restore default GL states
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
CCSize s = CCDirector::sharedDirector()->getWinSize();
b2Vec2 gravity;
gravity.Set(0.0f, -10.0f);
world = new b2World(gravity);
// Do we want to let bodies sleep?
world->SetAllowSleeping(true);
world->SetContinuousPhysics(true);
// m_debugDraw = new GLESDebugDraw( PTM_RATIO );
// world->SetDebugDraw(m_debugDraw);
uint32 flags = 0;
flags += b2Draw::e_shapeBit;
// flags += b2Draw::e_jointBit;
// flags += b2Draw::e_aabbBit;
// flags += b2Draw::e_pairBit;
// flags += b2Draw::e_centerOfMassBit;
//m_debugDraw->SetFlags(flags);
// Define the ground body.
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
// Call the body factory which allocates memory for the ground body
// from a pool and creates the ground box shape (also from a pool).
// The body is also added to the world.
b2Body* groundBody = world->CreateBody(&groundBodyDef);
// Define the ground box shape.
b2EdgeShape groundBox;
// bottom
groundBox.Set(b2Vec2(0,0), b2Vec2(s.width/PTM_RATIO,0));
groundBody->CreateFixture(&groundBox,0);
// top
groundBox.Set(b2Vec2(0,s.height/PTM_RATIO), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
// left
groundBox.Set(b2Vec2(0,s.height/PTM_RATIO), b2Vec2(0,0));
groundBody->CreateFixture(&groundBox,0);
// right
groundBox.Set(b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO), b2Vec2(s.width/PTM_RATIO,0));
groundBody->CreateFixture(&groundBox,0);
}
void HelloWorld::addNewSpriteWithCoords(CCPoint p)
void HelloWorld::draw()
{
//UXLOG(L"Add sprite %0.2f x %02.f",p.x,p.y);
CCSpriteBatchNode* sheet = (CCSpriteBatchNode*)getChildByTag(kTagSpriteManager);
//
// IMPORTANT:
// This is only for debug purposes
// It is recommend to disable it
//
CCLayer::draw();
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position );
kmGLPushMatrix();
world->DrawDebugData();
kmGLPopMatrix();
}
void HelloWorld::addNewSpriteAtPosition(CCPoint p)
{
CCLOG("Add sprite %0.2f x %02.f",p.x,p.y);
CCNode* parent = getChildByTag(kTagParentNode);
//We have a 64x64 sprite sheet with 4 different 32x32 images. The following code is
//just randomly picking one of the images
int idx = (CCRANDOM_0_1() > .5 ? 0:1);
int idy = (CCRANDOM_0_1() > .5 ? 0:1);
PhysicsSprite *sprite = new PhysicsSprite();
sprite->initWithTexture(m_pSpriteTexture, CCRectMake(32 * idx,32 * idy,32,32));
sprite->autorelease();
CCSprite *sprite = CCSprite::spriteWithBatchNode(sheet, CCRectMake(32 * idx,32 * idy,32,32));
sheet->addChild(sprite);
parent->addChild(sprite);
sprite->setPosition( CCPointMake( p.x, p.y) );
@ -140,7 +196,7 @@ void HelloWorld::addNewSpriteWithCoords(CCPoint p)
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position.Set(p.x/PTM_RATIO, p.y/PTM_RATIO);
bodyDef.userData = sprite;
b2Body *body = world->CreateBody(&bodyDef);
// Define another box shape for our dynamic body.
@ -153,10 +209,12 @@ void HelloWorld::addNewSpriteWithCoords(CCPoint p)
fixtureDef.density = 1.0f;
fixtureDef.friction = 0.3f;
body->CreateFixture(&fixtureDef);
sprite->setPhysicsBody(body);
}
void HelloWorld::tick(ccTime dt)
void HelloWorld::update(ccTime dt)
{
//It is recommended that a fixed time step is used with Box2D for stability
//of the simulation, however, we are using a variable time step here.
@ -195,11 +253,11 @@ void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event)
if(!touch)
break;
CCPoint location = touch->locationInView(touch->view());
CCPoint location = touch->locationInView();
location = CCDirector::sharedDirector()->convertToGL(location);
addNewSpriteWithCoords( location );
addNewSpriteAtPosition( location );
}
}

View File

@ -12,6 +12,17 @@
#include "cocos2d.h"
#include "Box2D.h"
class PhysicsSprite : public cocos2d::CCSprite
{
public:
PhysicsSprite();
void setPhysicsBody(b2Body * body);
virtual bool isDirty(void);
virtual cocos2d::CCAffineTransform nodeToParentTransform(void);
private:
b2Body* m_pBody; // strong ref
};
class HelloWorld : public cocos2d::CCLayer {
public:
~HelloWorld();
@ -20,14 +31,17 @@ public:
// returns a Scene that contains the HelloWorld as the only child
static cocos2d::CCScene* scene();
void initPhysics();
// adds a new sprite at a given coordinate
void addNewSpriteWithCoords(cocos2d::CCPoint p);
void addNewSpriteAtPosition(cocos2d::CCPoint p);
virtual void draw();
virtual void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
void tick(cocos2d::ccTime dt);
void update(cocos2d::ccTime dt);
private:
b2World* world;
cocos2d::CCTexture2D* m_pSpriteTexture; // weak ref
};
#endif // __HELLO_WORLD_H__

View File

@ -29,7 +29,7 @@ static AppDelegate s_sharedApplication;
window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
pixelFormat: kEAGLColorFormatRGBA8
depthFormat: GL_DEPTH_COMPONENT16_OES
depthFormat: GL_DEPTH_COMPONENT16
preserveBackbuffer: NO
sharegroup: nil
multiSampling: NO

View File

@ -46,12 +46,7 @@ bool AppDelegate::initInstance()
// the default setting is to create a fullscreen view
// if you want to use auto-scale, please enable view->create(320,480) in main.cpp
#endif // CC_PLATFORM_ANDROID
#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
// MaxAksenov said it's NOT a very elegant solution. I agree, haha
CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
#endif
bRet = true;
} while (0);
return bRet;
@ -70,7 +65,7 @@ bool AppDelegate::applicationDidFinishLaunching()
// pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
// turn on display FPS
pDirector->setDisplayFPS(true);
pDirector->setDisplayStats(true);
// set FPS. the default value is 1.0/60 if you don't call this
pDirector->setAnimationInterval(1.0 / 60);

View File

@ -14,25 +14,65 @@ using namespace cocos2d;
using namespace CocosDenshion;
enum {
kTagBatchNode = 1,
kTagParentNode = 1,
};
static void
eachShape(void *ptr, void* unused)
// callback to remove Shapes from the Space
void removeShape( cpBody *body, cpShape *shape, void *data )
{
cpShape *shape = (cpShape*) ptr;
CCSprite *sprite = (CCSprite*)shape->data;
if( sprite )
{
cpBody *body = shape->body;
// TIP: cocos2d and chipmunk uses the same struct to store it's position
// chipmunk uses: cpVect, and cocos2d uses CGPoint but in reality the are the same
// since v0.7.1 you can mix them if you want.
sprite->setPosition(CCPointMake(body->p.x, body->p.y));
sprite->setRotation((float) CC_RADIANS_TO_DEGREES( -body->a ));
}
cpShapeFree( shape );
}
ChipmunkPhysicsSprite::ChipmunkPhysicsSprite()
: m_pBody(NULL)
{
}
ChipmunkPhysicsSprite::~ChipmunkPhysicsSprite()
{
cpBodyEachShape(m_pBody, removeShape, NULL);
cpBodyFree( m_pBody );
}
void ChipmunkPhysicsSprite::setPhysicsBody(cpBody * body)
{
m_pBody = body;
}
// this method will only get called if the sprite is batched.
// return YES if the physics values (angles, position ) changed
// If you return NO, then nodeToParentTransform won't be called.
bool ChipmunkPhysicsSprite::isDirty(void)
{
return true;
}
CCAffineTransform ChipmunkPhysicsSprite::nodeToParentTransform(void)
{
CCFloat x = m_pBody->p.x;
CCFloat y = m_pBody->p.y;
if ( !getIsRelativeAnchorPoint() ) {
x += m_tAnchorPointInPoints.x;
y += m_tAnchorPointInPoints.y;
}
// Make matrix
CCFloat c = m_pBody->rot.x;
CCFloat s = m_pBody->rot.y;
if( ! CCPoint::CCPointEqualToPoint(m_tAnchorPointInPoints, CCPointZero) ){
x += c*-m_tAnchorPointInPoints.x + -s*-m_tAnchorPointInPoints.y;
y += s*-m_tAnchorPointInPoints.x + c*-m_tAnchorPointInPoints.y;
}
// Rot, Translate Matrix
m_tTransform = CCAffineTransformMake( c, s,
-s, c,
x, y );
return m_tTransform;
}
HelloWorld::HelloWorld()
@ -41,149 +81,191 @@ HelloWorld::HelloWorld()
HelloWorld::~HelloWorld()
{
// manually Free rogue shapes
for( int i=0;i<4;i++) {
cpShapeFree( m_pWalls[i] );
}
cpSpaceFree( m_pSpace );
}
CCScene* HelloWorld::scene()
{
// 'scene' is an autorelease object.
CCScene *scene = CCScene::node();
// 'layer' is an autorelease object.
HelloWorld *layer = HelloWorld::node();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
// 'scene' is an autorelease object.
CCScene *scene = CCScene::node();
// 'layer' is an autorelease object.
HelloWorld *layer = HelloWorld::node();
void HelloWorld::addNewSpriteX(float x, float y)
{
int posx, posy;
CCSpriteBatchNode *batch = (CCSpriteBatchNode*) getChildByTag(kTagBatchNode);
posx = (CCRANDOM_0_1() * 200);
posy = (CCRANDOM_0_1() * 200);
posx = (posx % 4) * 85;
posy = (posy % 3) * 121;
CCSprite *sprite = CCSprite::spriteWithBatchNode(batch, CCRectMake(posx, posy, 85, 121));
batch->addChild(sprite);
sprite->setPosition(ccp(x, y));
int num = 4;
cpVect verts[] = {
cpv(-24,-54),
cpv(-24, 54),
cpv( 24, 54),
cpv( 24,-54),
};
cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpv(0, 0)));
// TIP:
// since v0.7.1 you can assign CGPoint to chipmunk instead of cpVect.
// cpVect == CGPoint
body->p = cpv(x, y);
cpSpaceAddBody(space, body);
cpShape* shape = cpPolyShapeNew(body, num, verts, cpv(0, 0));
shape->e = 0.5f; shape->u = 0.5f;
shape->data = sprite;
cpSpaceAddShape(space, shape);
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool HelloWorld::init()
{
bool ret = false;
if (ret = CCLayer::init())
{
setIsTouchEnabled(true);
CCSize wins = CCDirector::sharedDirector()->getWinSize();
cpInitChipmunk();
cpBody *staticBody = cpBodyNew(INFINITY, INFINITY);
space = cpSpaceNew();
cpSpaceResizeStaticHash(space, 400.0f, 40);
cpSpaceResizeActiveHash(space, 100, 600);
space->gravity = cpv(0, 0);
space->elasticIterations = space->iterations;
cpShape *shape;
// bottom
shape = cpSegmentShapeNew(staticBody, cpv(0,0), cpv(wins.width,0), 0.0f);
shape->e = 1.0f; shape->u = 1.0f;
cpSpaceAddStaticShape(space, shape);
// top
shape = cpSegmentShapeNew(staticBody, cpv(0,wins.height), cpv(wins.width,wins.height), 0.0f);
shape->e = 1.0f; shape->u = 1.0f;
cpSpaceAddStaticShape(space, shape);
// left
shape = cpSegmentShapeNew(staticBody, cpv(0,0), cpv(0,wins.height), 0.0f);
shape->e = 1.0f; shape->u = 1.0f;
cpSpaceAddStaticShape(space, shape);
// right
shape = cpSegmentShapeNew(staticBody, cpv(wins.width,0), cpv(wins.width,wins.height), 0.0f);
shape->e = 1.0f; shape->u = 1.0f;
cpSpaceAddStaticShape(space, shape);
CCSpriteBatchNode *batch = CCSpriteBatchNode::batchNodeWithFile("grossini_dance_atlas.png", 100);
addChild(batch, 0, kTagBatchNode);
addNewSpriteX(200, 200);
schedule(schedule_selector(HelloWorld::step));
}
return ret;
if (!CCLayer::init())
{
return false;
}
// enable events
setIsTouchEnabled(true);
setIsAccelerometerEnabled(true);
CCSize s = CCDirector::sharedDirector()->getWinSize();
// title
CCLabelTTF *label = CCLabelTTF::labelWithString("Multi touch the screen", "Marker Felt", 36);
label->setPosition(ccp( s.width / 2, s.height - 30));
this->addChild(label, -1);
// init physics
initPhysics();
#if 1
// Use batch node. Faster
CCSpriteBatchNode *parent = CCSpriteBatchNode::batchNodeWithFile("grossini_dance_atlas.png", 100);
m_pSpriteTexture = parent->getTexture();
#else
// doesn't use batch node. Slower
m_pSpriteTexture = CCTextureCache::sharedTextureCache()->addImage("grossini_dance_atlas.png");
CCNode *parent = CCNode::node();
#endif
addChild(parent, 0, kTagParentNode);
addNewSpriteAtPosition(ccp(200,200));
scheduleUpdate();
return true;
}
void HelloWorld::onEnter()
void HelloWorld::initPhysics()
{
CCLayer::onEnter();
CCSize s = CCDirector::sharedDirector()->getWinSize();
// init chipmunk
cpInitChipmunk();
m_pSpace = cpSpaceNew();
m_pSpace->gravity = cpv(0, -100);
//
// rogue shapes
// We have to free them manually
//
// bottom
m_pWalls[0] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(0,0), cpv(s.width,0), 0.0f);
// top
m_pWalls[1] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(0,s.height), cpv(s.width,s.height), 0.0f);
// left
m_pWalls[2] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(0,0), cpv(0,s.height), 0.0f);
// right
m_pWalls[3] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(s.width,0), cpv(s.width,s.height), 0.0f);
for( int i=0;i<4;i++) {
m_pWalls[i]->e = 1.0f;
m_pWalls[i]->u = 1.0f;
cpSpaceAddStaticShape(m_pSpace, m_pWalls[i] );
}
}
void HelloWorld::step(ccTime delta)
void HelloWorld::update(ccTime delta)
{
int steps = 2;
CGFloat dt = delta/(CGFloat)steps;
for(int i=0; i<steps; i++)
{
cpSpaceStep(space, dt);
}
cpSpaceHashEach(space->activeShapes, &eachShape, NULL);
cpSpaceHashEach(space->staticShapes, &eachShape, NULL);
// Should use a fixed size step based on the animation interval.
int steps = 2;
CCFloat dt = CCDirector::sharedDirector()->getAnimationInterval()/(CCFloat)steps;
for(int i=0; i<steps; i++){
cpSpaceStep(m_pSpace, dt);
}
}
void HelloWorld::ccTouchesEnded(CCSet *touches, CCEvent *event)
void HelloWorld::addNewSpriteAtPosition(CCPoint pos)
{
CCSetIterator it;
CCTouch *touch;
for (it = touches->begin(); it != touches->end(); it++) {
touch = (CCTouch*)(*it);
if (! touch) {
break;
}
CCPoint location = touch->locationInView(touch->view());
location = CCDirector::sharedDirector()->convertToGL(location);
addNewSpriteX(location.x, location.y);
}
int posx, posy;
CCNode *parent = getChildByTag(kTagParentNode);
posx = CCRANDOM_0_1() * 200.0f;
posy = CCRANDOM_0_1() * 200.0f;
posx = (posx % 4) * 85;
posy = (posy % 3) * 121;
ChipmunkPhysicsSprite *sprite = new ChipmunkPhysicsSprite();
sprite->initWithTexture(m_pSpriteTexture, CCRectMake(posx, posy, 85, 121));
sprite->autorelease();
parent->addChild(sprite);
sprite->setPosition(pos);
int num = 4;
cpVect verts[] = {
cpv(-24,-54),
cpv(-24, 54),
cpv( 24, 54),
cpv( 24,-54),
};
cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero));
body->p = cpv(pos.x, pos.y);
cpSpaceAddBody(m_pSpace, body);
cpShape* shape = cpPolyShapeNew(body, num, verts, cpvzero);
shape->e = 0.5f; shape->u = 0.5f;
cpSpaceAddShape(m_pSpace, shape);
sprite->setPhysicsBody(body);
}
void HelloWorld::ccTouchesEnded(CCSet* touches, CCEvent* event)
{
//Add a new body/atlas sprite at the touched location
CCSetIterator it;
CCTouch* touch;
for( it = touches->begin(); it != touches->end(); it++)
{
touch = (CCTouch*)(*it);
if(!touch)
break;
CCPoint location = touch->locationInView();
location = CCDirector::sharedDirector()->convertToGL(location);
addNewSpriteAtPosition( location );
}
}
void HelloWorld::didAccelerate(CCAcceleration* pAccelerationValue)
{
static float prevX=0, prevY=0;
#define kFilterFactor 0.05f
float accelX = (float) pAccelerationValue->x * kFilterFactor + (1- kFilterFactor)*prevX;
float accelY = (float) pAccelerationValue->y * kFilterFactor + (1- kFilterFactor)*prevY;
prevX = accelX;
prevY = accelY;
CCPoint v = ccp( accelX, accelY);
v = ccpMult(v, 200);
m_pSpace->gravity = cpv(v.x, v.y);
}

View File

@ -14,23 +14,38 @@
// include Chipmunk headers
#include "chipmunk.h"
class ChipmunkPhysicsSprite : public cocos2d::CCSprite
{
public:
ChipmunkPhysicsSprite();
virtual ~ChipmunkPhysicsSprite();
void setPhysicsBody(cpBody* body);
virtual bool isDirty(void);
virtual cocos2d::CCAffineTransform nodeToParentTransform(void);
private:
cpBody* m_pBody; // strong ref
};
// HelloWorld Layer
class HelloWorld : public cocos2d::CCLayer {
public:
HelloWorld();
~HelloWorld();
static cocos2d::CCScene* scene();
void step(cocos2d::ccTime dt);
void addNewSpriteX(float x, float y);
virtual void onEnter();
virtual void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent *event);
LAYER_NODE_FUNC(HelloWorld);
HelloWorld();
~HelloWorld();
bool init();
static cocos2d::CCScene* scene();
LAYER_NODE_FUNC(HelloWorld);
void initPhysics();
void addNewSpriteAtPosition(cocos2d::CCPoint p);
void update(cocos2d::ccTime dt);
virtual void ccTouchesEnded(cocos2d::CCSet* touches, cocos2d::CCEvent* event);
virtual void didAccelerate(cocos2d::CCAcceleration* pAccelerationValue);
private:
bool init();
cpSpace *space;
cocos2d::CCTexture2D* m_pSpriteTexture; // weak ref
cpSpace* m_pSpace; // strong ref
cpShape* m_pWalls[4];
};
#endif // __HELLOW_WORLD_H__

View File

@ -29,7 +29,7 @@ static AppDelegate s_sharedApplication;
window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
pixelFormat: kEAGLColorFormatRGBA8
depthFormat: GL_DEPTH_COMPONENT16_OES
depthFormat: GL_DEPTH_COMPONENT16
preserveBackbuffer: NO
sharegroup: nil
multiSampling: NO

View File

@ -19,6 +19,7 @@
#endif
USING_NS_CC;
using namespace std;
using namespace CocosDenshion;
AppDelegate::AppDelegate()
@ -63,10 +64,6 @@ bool AppDelegate::initInstance()
#endif // CC_PLATFORM_ANDROID
#if (CC_TARGET_PLATFORM == CC_PLATFORM_MARMALADE)
// MaxAksenov said it's NOT a very elegant solution. I agree, haha
CCDirector::sharedDirector()->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);
#endif
bRet = true;
} while (0);
return bRet;
@ -82,7 +79,7 @@ bool AppDelegate::applicationDidFinishLaunching()
// pDirector->enableRetinaDisplay(true);
// turn on display FPS
pDirector->setDisplayFPS(true);
pDirector->setDisplayStats(true);
// pDirector->setDeviceOrientation(kCCDeviceOrientationLandscapeLeft);

View File

@ -30,12 +30,13 @@ local function creatDog()
spriteDog.isPaused = false
spriteDog:setPosition(0, winSize.height / 4 * 3)
local animFrames = CCMutableArray_CCSpriteFrame__:new(2)
local animFrames = CCArray:arrayWithCapacity(2)
animFrames:addObject(frame0)
animFrames:addObject(frame1)
local animation = CCAnimation:animationWithFrames(animFrames, 0.5)
local animate = CCAnimate:actionWithAnimation(animation, false);
local animation = CCAnimation:animationWithSpriteFrames(animFrames, 0.5)
local animate = CCAnimate:actionWithAnimation(animation);
spriteDog:runAction(CCRepeatForever:actionWithAction(animate))
-- moving dog at every frame
@ -47,10 +48,11 @@ local function creatDog()
else
x = x + 1
end
spriteDog:setPositionX(x)
end
CCScheduler:sharedScheduler():scheduleScriptFunc(tick, 0, false)
CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(tick, 0, false)
return spriteDog
end
@ -110,7 +112,7 @@ local function createLayerFram()
end
local function onTouchEnded(x, y)
cclog("onTouchEnded")
cclog("onTouchEnded: %0.2f, %0.2f", x, y)
touchBeginPoint = nil
spriteDog.isPaused = false
end
@ -151,7 +153,7 @@ local function createLayerMenu()
end
-- add a popup menu
local menuPopupItem = CCMenuItemImage:itemFromNormalImage("menu2.png", "menu2.png")
local menuPopupItem = CCMenuItemImage:itemWithNormalImage("menu2.png", "menu2.png")
menuPopupItem:setPosition(0, 0)
menuPopupItem:registerScriptHandler(menuCallbackClosePopup)
menuPopup = CCMenu:menuWithItem(menuPopupItem)
@ -160,7 +162,7 @@ local function createLayerMenu()
layerMenu:addChild(menuPopup)
-- add the left-bottom "tools" menu to invoke menuPopup
local menuToolsItem = CCMenuItemImage:itemFromNormalImage("menu1.png", "menu1.png")
local menuToolsItem = CCMenuItemImage:itemWithNormalImage("menu1.png", "menu1.png")
menuToolsItem:setPosition(0, 0)
menuToolsItem:registerScriptHandler(menuCallbackOpenPopup)
menuTools = CCMenu:menuWithItem(menuToolsItem)

View File

@ -45,7 +45,7 @@ static AppDelegate s_sharedApplication;
window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]];
EAGLView *__glView = [EAGLView viewWithFrame: [window bounds]
pixelFormat: kEAGLColorFormatRGBA8
depthFormat: GL_DEPTH_COMPONENT16_OES
depthFormat: GL_DEPTH_COMPONENT16
preserveBackbuffer: NO
sharegroup: nil
multiSampling: NO

View File

@ -0,0 +1 @@
a0108c887c7176801731f3e9503263b79a9eeb62

View File

@ -9,6 +9,7 @@
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__)
using namespace cocos2d;
using namespace cocos2d::extension;
extern "C"
{
@ -22,16 +23,16 @@ jint JNI_OnLoad(JavaVM *vm, void *reserved)
void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thiz, jint w, jint h)
{
if (!cocos2d::CCDirector::sharedDirector()->getOpenGLView())
if (!CCDirector::sharedDirector()->getOpenGLView())
{
cocos2d::CCEGLView *view = &cocos2d::CCEGLView::sharedOpenGLView();
CCEGLView *view = &CCEGLView::sharedOpenGLView();
view->setFrameSize(w, h);
// if you want to run in WVGA with HVGA resource, set it
// view->setDesignResolutionSize(480, 320);
cocos2d::CCDirector::sharedDirector()->setOpenGLView(view);
CCDirector::sharedDirector()->setOpenGLView(view);
AppDelegate *pAppDelegate = new AppDelegate();
cocos2d::CCApplication::sharedApplication().run();
CCApplication::sharedApplication().run();
}
else
{
@ -39,9 +40,9 @@ void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv* env, jobject thi
ccGLInvalidateStateCache();
CCShaderCache::sharedShaderCache()->reloadDefaultShaders();
cocos2d::CCTextureCache::reloadAllTextures();
cocos2d::CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND, NULL);
cocos2d::CCDirector::sharedDirector()->setGLDefaultValues();
CCTextureCache::reloadAllTextures();
CCNotificationCenter::sharedNotificationCenter()->postNotification(EVNET_COME_TO_FOREGROUND, NULL);
CCDirector::sharedDirector()->setGLDefaultValues();
}
}

View File

@ -1 +1 @@
0ffd9a2963117b5a53222965ff2d95f8178971f2
d1a839f74c0ea5ee4cc2a177a02afb14a4897067

View File

@ -17,20 +17,20 @@ void removeShape( cpBody *body, cpShape *shape, void *data )
}
ChipmunkPhysicsSprite::ChipmunkPhysicsSprite()
: body_(NULL)
: m_pBody(NULL)
{
}
ChipmunkPhysicsSprite::~ChipmunkPhysicsSprite()
{
cpBodyEachShape(body_, removeShape, NULL);
cpBodyFree( body_ );
cpBodyEachShape(m_pBody, removeShape, NULL);
cpBodyFree( m_pBody );
}
void ChipmunkPhysicsSprite::setPhysicsBody(cpBody * body)
{
body_ = body;
m_pBody = body;
}
// this method will only get called if the sprite is batched.
@ -43,8 +43,8 @@ bool ChipmunkPhysicsSprite::isDirty(void)
CCAffineTransform ChipmunkPhysicsSprite::nodeToParentTransform(void)
{
CCFloat x = body_->p.x;
CCFloat y = body_->p.y;
CCFloat x = m_pBody->p.x;
CCFloat y = m_pBody->p.y;
if ( !getIsRelativeAnchorPoint() ) {
x += m_tAnchorPointInPoints.x;
@ -52,8 +52,8 @@ CCAffineTransform ChipmunkPhysicsSprite::nodeToParentTransform(void)
}
// Make matrix
CCFloat c = body_->rot.x;
CCFloat s = body_->rot.y;
CCFloat c = m_pBody->rot.x;
CCFloat s = m_pBody->rot.y;
if( ! CCPoint::CCPointEqualToPoint(m_tAnchorPointInPoints, CCPointZero) ){
x += c*-m_tAnchorPointInPoints.x + -s*-m_tAnchorPointInPoints.y;
@ -90,10 +90,10 @@ ChipmunkAccelTouchTestLayer::ChipmunkAccelTouchTestLayer()
#if 1
// Use batch node. Faster
CCSpriteBatchNode *parent = CCSpriteBatchNode::batchNodeWithFile("Images/grossini_dance_atlas.png", 100);
spriteTexture_ = parent->getTexture();
m_pSpriteTexture = parent->getTexture();
#else
// doesn't use batch node. Slower
spriteTexture_ = CCTextureCache::sharedTextureCache()->addImage("Images/grossini_dance_atlas.png");
m_pSpriteTexture = CCTextureCache::sharedTextureCache()->addImage("Images/grossini_dance_atlas.png");
CCNode *parent = CCNode::node();
#endif
addChild(parent, 0, kTagParentNode);
@ -107,10 +107,10 @@ ChipmunkAccelTouchTestLayer::~ChipmunkAccelTouchTestLayer()
{
// manually Free rogue shapes
for( int i=0;i<4;i++) {
cpShapeFree( walls_[i] );
cpShapeFree( m_pWalls[i] );
}
cpSpaceFree( space_ );
cpSpaceFree( m_pSpace );
}
@ -121,30 +121,30 @@ void ChipmunkAccelTouchTestLayer::initPhysics()
// init chipmunk
cpInitChipmunk();
space_ = cpSpaceNew();
m_pSpace = cpSpaceNew();
space_->gravity = cpv(0, -100);
m_pSpace->gravity = cpv(0, -100);
//
// rogue shapes
// We have to free them manually
//
// bottom
walls_[0] = cpSegmentShapeNew( space_->staticBody, cpv(0,0), cpv(s.width,0), 0.0f);
m_pWalls[0] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(0,0), cpv(s.width,0), 0.0f);
// top
walls_[1] = cpSegmentShapeNew( space_->staticBody, cpv(0,s.height), cpv(s.width,s.height), 0.0f);
m_pWalls[1] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(0,s.height), cpv(s.width,s.height), 0.0f);
// left
walls_[2] = cpSegmentShapeNew( space_->staticBody, cpv(0,0), cpv(0,s.height), 0.0f);
m_pWalls[2] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(0,0), cpv(0,s.height), 0.0f);
// right
walls_[3] = cpSegmentShapeNew( space_->staticBody, cpv(s.width,0), cpv(s.width,s.height), 0.0f);
m_pWalls[3] = cpSegmentShapeNew( m_pSpace->staticBody, cpv(s.width,0), cpv(s.width,s.height), 0.0f);
for( int i=0;i<4;i++) {
walls_[i]->e = 1.0f;
walls_[i]->u = 1.0f;
cpSpaceAddStaticShape(space_, walls_[i] );
m_pWalls[i]->e = 1.0f;
m_pWalls[i]->u = 1.0f;
cpSpaceAddStaticShape(m_pSpace, m_pWalls[i] );
}
}
@ -155,7 +155,7 @@ void ChipmunkAccelTouchTestLayer::update(ccTime delta)
CCFloat dt = CCDirector::sharedDirector()->getAnimationInterval()/(CCFloat)steps;
for(int i=0; i<steps; i++){
cpSpaceStep(space_, dt);
cpSpaceStep(m_pSpace, dt);
}
}
@ -194,7 +194,7 @@ void ChipmunkAccelTouchTestLayer::addNewSpriteAtPosition(CCPoint pos)
posy = (posy % 3) * 121;
ChipmunkPhysicsSprite *sprite = new ChipmunkPhysicsSprite();
sprite->initWithTexture(spriteTexture_, CCRectMake(posx, posy, 85, 121));
sprite->initWithTexture(m_pSpriteTexture, CCRectMake(posx, posy, 85, 121));
sprite->autorelease();
parent->addChild(sprite);
@ -212,11 +212,11 @@ void ChipmunkAccelTouchTestLayer::addNewSpriteAtPosition(CCPoint pos)
cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero));
body->p = cpv(pos.x, pos.y);
cpSpaceAddBody(space_, body);
cpSpaceAddBody(m_pSpace, body);
cpShape* shape = cpPolyShapeNew(body, num, verts, cpvzero);
shape->e = 0.5f; shape->u = 0.5f;
cpSpaceAddShape(space_, shape);
cpSpaceAddShape(m_pSpace, shape);
sprite->setPhysicsBody(body);
}
@ -261,7 +261,7 @@ void ChipmunkAccelTouchTestLayer::didAccelerate(CCAcceleration* pAccelerationVal
CCPoint v = ccp( accelX, accelY);
v = ccpMult(v, 200);
space_->gravity = cpv(v.x, v.y);
m_pSpace->gravity = cpv(v.x, v.y);
}
void ChipmunkAccelTouchTestScene::runThisTest()

View File

@ -22,11 +22,11 @@ public:
void update(ccTime dt);
virtual void ccTouchesEnded(CCSet* touches, CCEvent* event);
virtual void didAccelerate(CCAcceleration* pAccelerationValue);
CCTexture2D *spriteTexture_; // weak ref
cpSpace *space_; // strong ref
cpShape *walls_[4];
private:
CCTexture2D* m_pSpriteTexture; // weak ref
cpSpace* m_pSpace; // strong ref
cpShape* m_pWalls[4];
};
class ChipmunkPhysicsSprite : public CCSprite
@ -38,7 +38,7 @@ public:
virtual bool isDirty(void);
virtual CCAffineTransform nodeToParentTransform(void);
private:
cpBody *body_; // strong ref
cpBody* m_pBody; // strong ref
};
class ChipmunkAccelTouchTestScene : public TestScene

View File

@ -30,7 +30,7 @@
#include "cocos2dExt.h"
USING_NS_CC;
USING_NS_CC_EXT;
#define CONTROL_SCENE_NODE_FUNC(controlScene) \
public: \

View File

@ -5,7 +5,7 @@
enum
{
MAX_COUNT = 2,
MAX_COUNT = 3,
LINE_SPACE = 40,
kItemTagBasic = 1000,
};
@ -13,7 +13,8 @@ enum
static const std::string testsName[MAX_COUNT] =
{
"NotificationCenterTest",
"CCControlButtonTest"
"CCControlButtonTest",
"TextureWatcherTest"
};
////////////////////////////////////////////////////////
@ -59,6 +60,13 @@ void ExtensionsMainLayer::menuCallback(CCObject* pSender)
CCDirector::sharedDirector()->replaceScene(pScene);
}
break;
case 2:
{
static bool s_bOpened = false;
s_bOpened = !s_bOpened;
CCTextureWatcher::sharedTextureWatcher()->setDisplayWatcher(s_bOpened);
}
break;
default:
break;
}

View File

@ -3,7 +3,6 @@
#include "cocos2d.h"
#include "../testBasic.h"
//#import "cocos2d.h"
class SchedulerTestLayer : public CCLayer

View File

@ -166,6 +166,7 @@ TestController::TestController()
setIsTouchEnabled(true);
addChild(pMenu, 1);
}
TestController::~TestController()

View File

@ -3,7 +3,8 @@
#include "cocos2d.h"
using namespace cocos2d;
USING_NS_CC;
USING_NS_CC_EXT;
using namespace std;
class TestScene : public CCScene

View File

@ -2,7 +2,7 @@ pushd ../../
echo "generating libcocos2dx"
mkdir -p template/xcode4/lib_cocos2dx.xctemplate
python ./tools/xcode4_template_generator/template_generator.py --directory cocos2dx --identifier libcocos2dx --prefix libs --exclude "android win32 airplay wophone bada third_party CCImage.cpp CCThread.cpp CCFileUtils.cpp Android.mk Linux linux qnx marmalade" > ./template/xcode4/lib_cocos2dx.xctemplate/TemplateInfo.plist
python ./tools/xcode4_template_generator/template_generator.py --directory cocos2dx --identifier libcocos2dx --prefix libs --exclude "android win32 airplay wophone bada third_party CCImage.cpp CCThread.cpp proj.ios CCFileUtilsCommon_cpp.h CCImageCommon_cpp.h CCFileUtils.cpp Android.mk Linux linux qnx marmalade" > ./template/xcode4/lib_cocos2dx.xctemplate/TemplateInfo.plist
echo "generating libcocosdenshion"
mkdir -p template/xcode4/lib_cocosdenshion.xctemplate