我正在创建一个游戏,其中有一个球,还有一些矩形,因为它们是桌子。
嗯,它与 Box2d 一起工作,所以我可以用我的 SneakyInput 操纵杆自由移动球,这是我的问题:
我有一个“桌子”和我的球,由 LevelHelper 和 SpriteHelper 制成。一切似乎都在这里正常工作。我的球是动态的,我的桌子是运动的(也尝试过静态的)。我的世界没有重力。
好吧,当我移动球时,它会与桌子碰撞一秒钟,并且在那一秒钟内无法通过它。在那之后,它确实如此。
我尝试了 Cocos2D HelloWorld 文件附带的盒子,我的球也是如此,与它们碰撞一秒钟左右,然后我可以穿过它们,它不会再次碰撞。
你有什么想法?
这里有一些代码:
{
-(id) init
{
if( (self=[super init])) {
self.isTouchEnabled = YES;
// init physics
b2Vec2 gravity = b2Vec2(0,0);
world = new b2World(gravity);
//load from level
loader = [[LevelHelperLoader alloc] initWithContentOfFile:@"Level1"];
[loader addObjectsToWorld:world cocos2dLayer:self];
[self schedule: @selector(tick:) interval:1.0f/60.0f];
[self draw];
[self initJoystick];
//This load some example sprites for collisions
// Use batch node. Faster
CCSpriteBatchNode *parent = [CCSpriteBatchNode batchNodeWithFile:@"blocks.png" capacity:100];
spriteTexture_ = [parent texture];
// doesn't use batch node. Slower
spriteTexture_ = [[CCTextureCache sharedTextureCache] addImage:@"blocks.png"];
CCNode *parent = [CCNode node];
[self addChild:parent z:0 tag:kTagParentNode];
[self scheduleUpdate];
}
return self;
}
-(void) tick: (ccTime) dt{
//scaled velocity for joystick
CGPoint scaledVelocity = ccpMult(joystick.velocity, 120);
world->Step(dt, 10, 10);
for (b2Body* b = world->GetBodyList();b; b=b->GetNext()){
CCSprite *myActor = (CCSprite*)b->GetUserData();
if (b->GetUserData() != NULL){
if (b->GetType() == b2_dynamicBody && myActor == [loader spriteWithUniqueName:@"prota"]){
b->SetTransform(b2Vec2(b->GetPosition().x+scaledVelocity.x*dt/PTM_RATIO,b->GetPosition().y+scaledVelocity.y*dt/PTM_RATIO), 0);
//move sprite to body position
myActor.position = ccp(b->GetPosition().x * PTM_RATIO,
b->GetPosition().y * PTM_RATIO);
}
}
}
}
提前致谢!