我的遊戲有點小問題。在我的主要遊戲場景,我從一個類創建Player對象,就像這樣:Box2D對象速度
player = [Player spriteWithFile:@"[email protected]"];
player.position = ccp(100.0f, 180.0f);
[player createBox2dObject:world];
下面是我的小球員類的主要塊創建身體和夾具,所以我可以在Box2D的世界用它。
b2BodyDef playerBodyDef;
playerBodyDef.type = b2_dynamicBody;
playerBodyDef.position.Set(self.position.x/PTM_RATIO, self.position.y/PTM_RATIO);
playerBodyDef.userData = self;
playerBodyDef.fixedRotation = true;
playerBodyDef.linearDamping = 4.0;
body = world->CreateBody(&playerBodyDef);
b2CircleShape circleShape;
circleShape.m_radius = 0.7;
b2FixtureDef fixtureDef;
fixtureDef.shape = &circleShape;
fixtureDef.density = 1.0f;
fixtureDef.friction = 1.0f;
fixtureDef.restitution = 1.0f;
body->CreateFixture(&fixtureDef);
此代碼的結果是具有[email protected]一個box2d的對象在其上。當我移動遊戲杆時,會施加Box2D衝動並且玩家移動。很簡單,對嗎? 在非視網膜顯示器,這工作正常。但是,當我在模擬器中切換到Retina時,[email protected]創建得稍高一點,而不是在Box2D圓上。然後,施加重力,它們都落到平臺上。 [email protected]下降速度快一倍。當我移動操縱桿時,Box2D圓移動,但[email protected]移動速度加快一倍,相機隨之移動,很快將圓圈離開屏幕。我懷疑這個問題與我在這裏的代碼有什麼關係,我覺得它是一個隱藏在我的遊戲中的擴展問題。有沒有人有建議?
編輯: 我移動精靈用:
[player moveRight];
這是MoveRight的在播放器類:
-(void) moveRight {
b2Vec2 impulse = b2Vec2(2.0f, 0.0f);
body->ApplyLinearImpulse(impulse, body->GetWorldCenter());
}
應該是沒有什麼問題在這裏,對不對?
編輯(再一次):
這裏是我的更新:方法 -
- (void) update:(ccTime)dt {
int32 velocityIterations = 8;
int32 positionIterations = 1;
world->Step(dt, velocityIterations, positionIterations);
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext()) {
if (b->GetUserData() != NULL) {
CCSprite *myActor = (CCSprite*)b->GetUserData();
myActor.position = CGPointMake(b->GetPosition().x *PTM_RATIO,
b->GetPosition().y * PTM_RATIO);
myActor.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
}
}
b2Vec2 pos = [player body]->GetPosition();
CGPoint newPos = ccp(-1 * pos.x * PTM_RATIO + 50, self.position.y * PTM_RATIO);
[self setPosition:newPos];
}
我有一種感覺,這個問題是在這裏的某個地方。我試過改變PTM_RATIO,但它不影響速度。有任何想法嗎?
編輯:見下面的評論,幾乎有這個想通了
完全不是......我正在尋找你的框架方法,根據box2d body的位置更新精靈位置。 – 2012-02-19 00:32:31
不知道這是否會改變你正在嘗試完成的任務,但也可能嘗試body-> SetLinearVelocity(impulse); – 2012-02-19 00:34:59
我嘗試用它替換我的ApplyLinearImpulse行,但沒有任何變化(除速度慢得多)。通過更新身體的精靈位置,你的意思是什麼?你是說每一幀我都必須將精靈的位置設置到身體上?順便提一下,感謝您的幫助。 – nick 2012-02-19 22:55:12