PuzzleSDK
ChipmunkTest类 参考

#include <ChipmunkTest.h>

+ 类 ChipmunkTest 继承关系图:
+ ChipmunkTest 的协作图:

Public 成员函数

 CREATE_FUNC (ChipmunkTest)
 
 ChipmunkTest ()
 
 ~ChipmunkTest ()
 
void onEnter () override
 
void initPhysics ()
 
void createResetButton ()
 
void reset (cocos2d::Ref *sender)
 
void addNewSpriteAtPosition (cocos2d::Vec2 p)
 
void update (float dt) override
 
void toggleDebugCallback (cocos2d::Ref *sender)
 
void onTouchesEnded (const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
 
virtual void onAcceleration (cocos2d::Acceleration *acc, cocos2d::Event *event)
 
- Public 成员函数 继承自 TestCase
 TestCase ()
 
 ~TestCase ()
 
virtual std::string title () const
 
virtual std::string subtitle () const
 
virtual Type getTestType () const
 
virtual float getDuration () const
 
virtual std::string getExpectedOutput () const
 
virtual std::string getActualOutput () const
 
virtual void restartTestCallback (cocos2d::Ref *sender)
 
virtual void nextTestCallback (cocos2d::Ref *sender)
 
virtual void priorTestCallback (cocos2d::Ref *sender)
 
virtual void onBackCallback (cocos2d::Ref *sender)
 
void setTestSuite (TestSuite *testSuite)
 
TestSuitegetTestSuite () const
 
float getRunTime () const
 
void setTestCaseName (const std::string &name)
 
std::string getTestCaseName () const
 
const cocos2d::Label * getSubtitleLable () const
 
const cocos2d::MenuItemImage * getRestartTestItem () const
 

Private 属性

cocos2d::Texture2D * _spriteTexture
 
cpSpace * _space
 
cpShape * _walls [4]
 

额外继承的成员函数

- Public 类型 继承自 TestCase
enum class  Type { ROBUSTNESS , UNIT , GRAPHICAL_STATIC , MANUAL }
 
- Public 属性 继承自 TestCase
CC_CONSTRUCTOR_ACCESS __pad0__: virtual bool init() override
 
- Protected 属性 继承自 TestCase
cocos2d::MenuItemImage * _priorTestItem
 
cocos2d::MenuItemImage * _restartTestItem
 
cocos2d::MenuItemImage * _nextTestItem
 
cocos2d::Label * _titleLabel
 
cocos2d::Label * _subtitleLabel
 

详细描述

在文件 ChipmunkTest.h36 行定义.

构造及析构函数说明

◆ ChipmunkTest()

ChipmunkTest::ChipmunkTest ( )

在文件 ChipmunkTest.cpp48 行定义.

49{
50#if CC_ENABLE_CHIPMUNK_INTEGRATION
51 // enable events
52
53 auto touchListener = EventListenerTouchAllAtOnce::create();
54 touchListener->onTouchesEnded = CC_CALLBACK_2(ChipmunkTest::onTouchesEnded, this);
55 _eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);
56
57 Device::setAccelerometerEnabled(true);
58 auto accListener = EventListenerAcceleration::create(CC_CALLBACK_2(ChipmunkTest::onAcceleration, this));
59 _eventDispatcher->addEventListenerWithSceneGraphPriority(accListener, this);
60
61 // title
62 auto label = Label::createWithTTF("Multi touch the screen", "fonts/Marker Felt.ttf", 36.0f);
63 label->setPosition(VisibleRect::center().x, VisibleRect::top().y - 30);
64 this->addChild(label, -1);
65
66 // reset button
68
69 // init physics
71
72#if 1
73 // Use batch node. Faster
74 auto parent = SpriteBatchNode::create("Images/grossini_dance_atlas.png", 100);
75 _spriteTexture = parent->getTexture();
76#else
77 // doesn't use batch node. Slower
78 _spriteTexture = Director::getInstance()->getTextureCache()->addImage("Images/grossini_dance_atlas.png");
79 auto parent = Node::create();
80#endif
81 addChild(parent, 0, kTagParentNode);
82
83 addNewSpriteAtPosition(cocos2d::Vec2(200.0f,200.0f));
84
85 // menu for debug layer
86 MenuItemFont::setFontSize(18);
87 auto item = MenuItemFont::create("Toggle debug", CC_CALLBACK_1(ChipmunkTest::toggleDebugCallback, this));
88
89 auto menu = Menu::create(item, nullptr);
90 this->addChild(menu);
91 menu->setPosition(VisibleRect::right().x-100, VisibleRect::top().y-60);
92
93 scheduleUpdate();
94#else
95 auto label = Label::createWithTTF("Should define CC_ENABLE_CHIPMUNK_INTEGRATION=1\n to run this test case",
96 "fonts/arial.ttf",
97 18);
98 auto size = Director::getInstance()->getWinSize();
99 label->setPosition(size.width/2, size.height/2);
100
101 addChild(label);
102
103#endif
104
105}
@ kTagParentNode
void addNewSpriteAtPosition(cocos2d::Vec2 p)
void toggleDebugCallback(cocos2d::Ref *sender)
void createResetButton()
virtual void onAcceleration(cocos2d::Acceleration *acc, cocos2d::Event *event)
cocos2d::Texture2D * _spriteTexture
Definition: ChipmunkTest.h:55
void initPhysics()
void onTouchesEnded(const std::vector< cocos2d::Touch * > &touches, cocos2d::Event *event)
static cocos2d::Vec2 top()
Definition: VisibleRect.cpp:57
static cocos2d::Vec2 center()
Definition: VisibleRect.cpp:69
static cocos2d::Vec2 right()
Definition: VisibleRect.cpp:51

引用了 _spriteTexture, addNewSpriteAtPosition(), VisibleRect::center(), createResetButton(), initPhysics(), kTagParentNode, onAcceleration(), onTouchesEnded(), VisibleRect::right(), toggleDebugCallback() , 以及 VisibleRect::top().

+ 函数调用图:

◆ ~ChipmunkTest()

ChipmunkTest::~ChipmunkTest ( )

在文件 ChipmunkTest.cpp114 行定义.

115{
116#if CC_ENABLE_CHIPMUNK_INTEGRATION
117 // manually Free rogue shapes
118 for( int i=0;i<4;i++) {
119 cpShapeFree( _walls[i] );
120 }
121
122#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
123 cpSpaceFree(_space);
124#else
125 cpHastySpaceFree(_space);
126#endif
127
128 Device::setAccelerometerEnabled(false);
129#endif
130}
cpSpace * _space
Definition: ChipmunkTest.h:59
cpShape * _walls[4]
Definition: ChipmunkTest.h:60

引用了 _space , 以及 _walls.

成员函数说明

◆ addNewSpriteAtPosition()

void ChipmunkTest::addNewSpriteAtPosition ( cocos2d::Vec2  p)

在文件 ChipmunkTest.cpp215 行定义.

216{
217#if CC_ENABLE_CHIPMUNK_INTEGRATION
218 int posx, posy;
219
220 auto parent = getChildByTag(kTagParentNode);
221
222 posx = CCRANDOM_0_1() * 200.0f;
223 posy = CCRANDOM_0_1() * 200.0f;
224
225 posx = (posx % 4) * 85;
226 posy = (posy % 3) * 121;
227
228
229 int num = 4;
230 cpVect verts[] = {
231 cpv(-24,-54),
232 cpv(-24, 54),
233 cpv( 24, 54),
234 cpv( 24,-54),
235 };
236
237 cpBody *body = cpBodyNew(1.0f, cpMomentForPoly(1.0f, num, verts, cpvzero, 0.0f));
238
239 cpBodySetPosition(body, cpv(pos.x, pos.y));
240 cpSpaceAddBody(_space, body);
241
242 cpShape* shape = cpPolyShapeNew(body, num, verts, cpTransformIdentity, 0.0f);
243 cpShapeSetElasticity(shape, 0.5f);
244 cpShapeSetFriction(shape, 0.5f);
245 cpSpaceAddShape(_space, shape);
246
247 auto sprite = PhysicsSprite::createWithTexture(_spriteTexture, cocos2d::Rect(posx, posy, 85, 121));
248 parent->addChild(sprite);
249
250 sprite->setCPBody(body);
251 sprite->setPosition(pos);
252#endif
253}

引用了 _space, _spriteTexture , 以及 kTagParentNode.

被这些函数引用 ChipmunkTest() , 以及 onTouchesEnded().

+ 这是这个函数的调用关系图:

◆ CREATE_FUNC()

ChipmunkTest::CREATE_FUNC ( ChipmunkTest  )

◆ createResetButton()

void ChipmunkTest::createResetButton ( )

在文件 ChipmunkTest.cpp200 行定义.

201{
202 auto reset = MenuItemImage::create("Images/r1.png", "Images/r2.png", CC_CALLBACK_1(ChipmunkTest::reset, this));
203
204 auto menu = Menu::create(reset, nullptr);
205
206 menu->setPosition(VisibleRect::center().x, VisibleRect::bottom().y + 30);
207 this->addChild(menu, -1);
208}
void reset(cocos2d::Ref *sender)
static cocos2d::Vec2 bottom()
Definition: VisibleRect.cpp:63

引用了 VisibleRect::bottom(), VisibleRect::center() , 以及 reset().

被这些函数引用 ChipmunkTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ initPhysics()

void ChipmunkTest::initPhysics ( )

在文件 ChipmunkTest.cpp132 行定义.

133{
134#if CC_ENABLE_CHIPMUNK_INTEGRATION
135 // init chipmunk
136 //cpInitChipmunk();
137
138#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
139 _space = cpSpaceNew();
140#else
141 _space = cpHastySpaceNew();
142 cpHastySpaceSetThreads(_space, 0);
143#endif
144
145 cpSpaceSetGravity(_space, cpv(0.0f, -100.0f));
146
147 //
148 // rogue shapes
149 // We have to free them manually
150 //
151 // bottom
152 _walls[0] = cpSegmentShapeNew( cpSpaceGetStaticBody(_space),
155
156 // top
157 _walls[1] = cpSegmentShapeNew( cpSpaceGetStaticBody(_space),
159 cpv(VisibleRect::rightTop().x, VisibleRect::rightTop().y), 0.0f);
160
161 // left
162 _walls[2] = cpSegmentShapeNew( cpSpaceGetStaticBody(_space),
164 cpv(VisibleRect::leftTop().x,VisibleRect::leftTop().y), 0.0f);
165
166 // right
167 _walls[3] = cpSegmentShapeNew( cpSpaceGetStaticBody(_space),
169 cpv(VisibleRect::rightTop().x, VisibleRect::rightTop().y), 0.0f);
170
171 for( int i=0;i<4;i++) {
172
173 cpShapeSetElasticity(_walls[i], 1.0f);
174 cpShapeSetFriction(_walls[i], 1.0f);
175 cpSpaceAddShape(_space, _walls[i]);
176 }
177
178 // Physics debug layer
179 _debugLayer = PhysicsDebugNode::create(_space);
180 this->addChild(_debugLayer, Z_PHYSICS_DEBUG);
181#endif
182}
@ Z_PHYSICS_DEBUG
static cocos2d::Vec2 leftTop()
Definition: VisibleRect.cpp:75
static cocos2d::Vec2 rightTop()
Definition: VisibleRect.cpp:81
static cocos2d::Vec2 rightBottom()
Definition: VisibleRect.cpp:93
static cocos2d::Vec2 leftBottom()
Definition: VisibleRect.cpp:87

引用了 _space, _walls, VisibleRect::leftBottom(), VisibleRect::leftTop(), VisibleRect::rightBottom(), VisibleRect::rightTop() , 以及 Z_PHYSICS_DEBUG.

被这些函数引用 ChipmunkTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ onAcceleration()

void ChipmunkTest::onAcceleration ( cocos2d::Acceleration *  acc,
cocos2d::Event *  event 
)
virtual

在文件 ChipmunkTest.cpp272 行定义.

273{
274 static float prevX=0, prevY=0;
275
276#define kFilterFactor 0.05f
277
278 float accelX = (float) acc->x * kFilterFactor + (1- kFilterFactor)*prevX;
279 float accelY = (float) acc->y * kFilterFactor + (1- kFilterFactor)*prevY;
280
281 prevX = accelX;
282 prevY = accelY;
283
284 auto v = cocos2d::Vec2( accelX, accelY);
285 v = v * 200;
286 cpSpaceSetGravity(_space, cpv(v.x, v.y));
287}
#define kFilterFactor

引用了 _space , 以及 kFilterFactor.

被这些函数引用 ChipmunkTest().

+ 这是这个函数的调用关系图:

◆ onEnter()

void ChipmunkTest::onEnter ( )
overridevirtual

重载 TestCase .

在文件 ChipmunkTest.cpp255 行定义.

256{
258}
virtual void onEnter() override
Definition: BaseTest.cpp:430

引用了 TestCase::onEnter().

+ 函数调用图:

◆ onTouchesEnded()

void ChipmunkTest::onTouchesEnded ( const std::vector< cocos2d::Touch * > &  touches,
cocos2d::Event *  event 
)

在文件 ChipmunkTest.cpp260 行定义.

261{
262 //Add a new body/atlas sprite at the touched location
263
264 for( auto &touch: touches)
265 {
266 auto location = touch->getLocation();
267
268 addNewSpriteAtPosition( location );
269 }
270}

引用了 addNewSpriteAtPosition().

被这些函数引用 ChipmunkTest().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ reset()

void ChipmunkTest::reset ( cocos2d::Ref *  sender)

在文件 ChipmunkTest.cpp210 行定义.

211{
213}
TestSuite * getTestSuite() const
Definition: BaseTest.h:83
virtual void restartCurrTest()
Definition: BaseTest.cpp:299

引用了 TestCase::getTestSuite() , 以及 TestSuite::restartCurrTest().

被这些函数引用 createResetButton().

+ 函数调用图:
+ 这是这个函数的调用关系图:

◆ toggleDebugCallback()

void ChipmunkTest::toggleDebugCallback ( cocos2d::Ref *  sender)

在文件 ChipmunkTest.cpp107 行定义.

108{
109#if CC_ENABLE_CHIPMUNK_INTEGRATION
110 _debugLayer->setVisible(! _debugLayer->isVisible());
111#endif
112}

被这些函数引用 ChipmunkTest().

+ 这是这个函数的调用关系图:

◆ update()

void ChipmunkTest::update ( float  dt)
override

在文件 ChipmunkTest.cpp184 行定义.

185{
186 // Should use a fixed size step based on the animation interval.
187 int steps = 2;
188 float dt = Director::getInstance()->getAnimationInterval()/(float)steps;
189
190 for(int i=0; i<steps; i++){
191
192#if CC_TARGET_PLATFORM == CC_PLATFORM_WIN32
193 cpSpaceStep(_space, dt);
194#else
195 cpHastySpaceStep(_space, dt);
196#endif
197 }
198}

引用了 _space.

类成员变量说明

◆ _space

cpSpace* ChipmunkTest::_space
private

在文件 ChipmunkTest.h59 行定义.

被这些函数引用 addNewSpriteAtPosition(), initPhysics(), onAcceleration(), update() , 以及 ~ChipmunkTest().

◆ _spriteTexture

cocos2d::Texture2D* ChipmunkTest::_spriteTexture
private

在文件 ChipmunkTest.h55 行定义.

被这些函数引用 addNewSpriteAtPosition() , 以及 ChipmunkTest().

◆ _walls

cpShape* ChipmunkTest::_walls[4]
private

在文件 ChipmunkTest.h60 行定义.

被这些函数引用 initPhysics() , 以及 ~ChipmunkTest().


该类的文档由以下文件生成: