C++ 颤抖的精灵cocos2dx 3.0

C++ 颤抖的精灵cocos2dx 3.0,c++,opengl-es,cocos2d-x,C++,Opengl Es,Cocos2d X,我注意到雪碧在加速下行时颤抖。。以下是全部代码: 我正在用iPhone3GS测试这段代码,猜猜为什么 TestScene.h: class TestScene : public Layer { public: .... virtual void update(float delta); float spawnTime = 0.9; float untilNextSpawn = 0; virtual void spawn(); float gam

我注意到雪碧在加速下行时颤抖。。以下是全部代码: 我正在用iPhone3GS测试这段代码,猜猜为什么

TestScene.h:

class TestScene : public Layer {
public:
    ....
    virtual void update(float delta);

    float spawnTime = 0.9;
    float untilNextSpawn = 0;

    virtual void spawn();
    float gameSpeed = 200;
    float gameAcceleration = 10;
    Vector<Sprite*> objects;
};
类测试场景:公共层{
公众:
....
虚拟空隙更新(浮动增量);
浮动时间=0.9;
float untinextspawn=0;
虚拟空产卵();
浮动游戏速度=200;
浮子加速度=10;
矢量对象;
};
TestScene.cpp:

 void TestScene::update(float delta) {
     untilNextSpawn -= delta;
     if (untilNextSpawn <= 0) {
         spawn();
         untilNextSpawn = spawnTime;
     }

     gameSpeed += gameAcceleration * delta;

     for (int i = 0; i < objects.size(); i++) {
         Sprite* t = objects.at(i);
         if (t->getPosition().y <= 0)
             t->setVisible(false);
         else 
             t->setPositionY(t->getPositionY() - gameSpeed * delta);
    }
}

void TestScene::spawn() {
    Sprite* sprite = NULL;
    for (int i = 0; i < objects.size(); i++) {
        Sprite* t = objects.at(i);
        if (!t->isVisible()) {
            sprite = t; break;  
        }
    }
    if (!sprite) {
        sprite = Sprite::create("prefab_button.png");
        this->addChild(sprite);
        objects.pushBack(sprite);
    }
    sprite->setVisible(true);
    sprite->setPosition(Point(getContentSize().width / 2, getContentSize().height + 100));
}
void TestScene::更新(浮点增量){
直到外部繁殖-=三角洲;
if(untilNextSpawn getPosition().y setVisible)(false);
其他的
t->setPositionY(t->getPositionY()-gameSpeed*delta);
}
}
void TestScene::spawn(){
Sprite*Sprite=NULL;
对于(int i=0;iisVisible()){
雪碧=t;破裂;
}
}
如果(!精灵){
sprite=sprite::create(“prefab_button.png”);
此->添加子对象(精灵);
对象。推回(精灵);
}
精灵->设置可见(真);
精灵->设置位置(点(getContentSize().width/2,getContentSize().height+100);
}
预制按钮.png:

TestScene.h:

TestScene.cpp:


下面是视频:

不要发布链接。如果代码太长,请将其缩减到最小的测试用例。尝试检查x和y位置是否始终相同……为什么?这不可能是相同的。可以在
spawn()
中解释为什么要在循环中设置
sprite=t
,然后在循环完成后检查
(!sprite)
这与上一次循环完全相同,然后在
(!sprite)中重新设置sprite然后重新添加回循环中读取的同一向量。也不需要使用
Sprite*t`……当Sprite离开屏幕时,我隐藏它,然后当我必须生成一些Sprite时,首先我检查屏幕上是否有一些对象,然后使用它,否则我必须创建一个新对象,然后将其添加到screen和数组。