gpt4 book ai didi

ios - cocos2d 没有以固定时间步长以 60 FPS 运行

转载 作者:行者123 更新时间:2023-11-29 11:21:22 26 4
gpt4 key购买 nike

我在我的 iOS cocos2d 应用程序上以 40 FPS 的速度运行,有 80 个 Box2d 对象。我正在使用固定时间步长:

-(void) update: (ccTime) dt
{
if( gameState_ != kGameStatePaused ) {
world_->Step(dt, 6, 1 );

....
}

为什么会这样?谢谢。

最佳答案

这是一个更好的固定时间步长:

//FIX TIME STEP
///////--->>>>>>>>>>>>>
const float32 FIXED_TIMESTEP = 1.0f / 60.0f;

// Minimum remaining time to avoid box2d unstability caused by very small delta times
// if remaining time to simulate is smaller than this, the rest of time will be added to the last step,
// instead of performing one more single step with only the small delta time.
const float32 MINIMUM_TIMESTEP = 1.0f / 600.0f;

const int32 VELOCITY_ITERATIONS = 8;
const int32 POSITION_ITERATIONS = 8;

// maximum number of steps per tick to avoid spiral of death
const int32 MAXIMUM_NUMBER_OF_STEPS = 25;
///////<<<<<<<<<<<<<<<<<<-------------------

//FIX TIME STEP----------->>>>>>>>>>>>>>>>
-(void)afterStep {

// process collisions and result from callbacks called by the step
}


-(void)step:(ccTime)dt {
float32 frameTime = dt;
int stepsPerformed = 0;
while ( (frameTime > 0.0) && (stepsPerformed < MAXIMUM_NUMBER_OF_STEPS) ){
float32 deltaTime = std::min( frameTime, FIXED_TIMESTEP );
frameTime -= deltaTime;
if (frameTime < MINIMUM_TIMESTEP) {
deltaTime += frameTime;
frameTime = 0.0f;
}
world->Step(deltaTime,VELOCITY_ITERATIONS,POSITION_ITERATIONS);
stepsPerformed++;
[self afterStep]; // process collisions and result from callbacks called by the step
}
world->ClearForces ();
}
//FIX TIME STEP<<<<<<<<<<<<<<<<<------------------


-(void) tick: (ccTime) dt
{
//It is recommended that a fixed time step is used with Box2D for stability
//of the simulation, however, we are using a variable time step here.
//You need to make an informed choice, the following URL is useful
//http://gafferongames.com/game-physics/fix-your-timestep/

// Instruct the world to perform a single step of simulation. It is
// generally best to keep the time step and iterations fixed.
// world->Step(dt, velocityIterations, positionIterations);
[self step:dt];

//Iterate over the bodies in the physics world
for (b2Body* b = world->GetBodyList(); b; b = b->GetNext())
{
if (b->GetUserData() != NULL) {

CCSprite *myActor;
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());

}
}
}

关于ios - cocos2d 没有以固定时间步长以 60 FPS 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6982335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com