私は現在、似たようなものに取り組んでいます。私は私の男のために一定の実行速度が欲しかったので、SetLinearVelocity(b2Vec2)
コマンドをたくさん使って何かを実装しました。Box2D で、移動中に実行されるすべての関数に対して SetLinearVelocity を呼び出すことが「適切」であるかどうかはわかりupdate:(ccTime)dt
ません。これは、ばかげているように見える物理エンジンを回避するようなものですが、これまでのところ問題なく機能しています。
以下のルーチンの効果はupdate:
、プレーヤーの体が突然動きを止めないようにすることです。プレイヤーの体と環境をうまく微調整すれば、止まるときに小さなスライドがあります。
私のタッチ コールバックは、以下の Player オブジェクト-(BOOL) ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
の関数を呼び出します。setGoalX:(float)x
//somewhere initially, I set up linear damping for some extra drag in my player class
//note: GROUND_DAMPING is defined earlier in my file, and is not a Box2d thing.
self.physicsBody->SetLinearDamping(GROUND_DAMPING);
-(void) setGoalX:(float)x
{
goal_->x = x; //b2Vec2* goal
}
-(void) update:(ccTime)dt
{
int dx = (goal_->x - body->GetPosition().x)*10;
if (dx != 0) {
xdir = (dx > 0) ? 1 : -1;
if (abs(dx) >= 10)
body->SetLinearVelocity(b2Vec2(RUN_SPEED*xdir,body->GetLinearVelocity().y));
} else xdir = 0;
}