ボールがあり、テーブルのようにいくつかの長方形があるゲームを作成しています。
Box2d で動作しているので、SneakyInput ジョイスティックでボールを自由に動かすことができます。ここに問題があります。
LevelHelper と SpriteHelper で作成した「テーブル」とボールがあります。ここではすべてが適切に機能しているようです。私のボールは動的で、テーブルはキネマティックです (静的でも試してみました)。私の世界には重力はありません。
さて、ボールを動かしていると、一瞬だけテーブルにぶつかり、その瞬間通り抜けることができません。その後、そうです。
Cocos2D HelloWorld ファイルに付属のボックスを試してみましたが、ボールも同じように 1 秒ほど衝突します。
あなたはなにか考えはありますか?
ここにいくつかのコードがあります:
{
-(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);
}
}
}
}
前もって感謝します!