【发布时间】:2019-08-12 16:56:45
【问题描述】:
我在 cocos2d-x 上创建了一个小游戏,在移动版本中遇到了一些问题。游戏有带有地形和角色的图层,以及带有 ui/info 对象的图层。带地形的图层不会移动。并带有 ui/info 的图层随字符移动(因此它在屏幕上是静态的)。 在移动版本中,来自 ui 层的所有精灵都在颤抖,但只有精灵,标签是静态的。在 PC 版本中,精灵和标签也是静态的。
创建标签和精灵。在 PC(Win 和 Mac)和移动设备(Android)上标记静态,在 PC 上标记静态,在移动设备上颤抖:
auto infoLayer = m_params->getGameInfoDelegate(); // class GameInfo
auto size = Director::getInstance()->getVisibleSize();
TTFConfig ttfconfig("fonts/Marker Felt.ttf", 100);
auto label = Label::createWithTTF(ttfconfig, "0");
label->setPosition(Vec2(size.width / 2, size.height / 2 + 40));
label->setString("Hello");
infoLayer->getLayer()->addChild(label, 10);
auto spr = Sprite::create();
spr->setColor(Color3B(200, 100, 100));
spr->setTextureRect(Rect(0, 0, 150, 150));
spr->setPosition(Vec2(size.width / 2, size.height / 2 - 40));
infoLayer->getLayer()->addChild(spr, 9);
更新位置层和相机:
update(float t)
{
...
m_cameraFollow->update();
...
}
void CameraFollow::update()
{
float moveX;
float moveY;
...
m_camera->move(Vec2(moveX, moveY)); // class GameCamera
}
void GameCamera::move(const cocos2d::Vec2& m)
{
float x;
float y;
...
m_position.x = x;
m_position.y = y;
m_camera->setPosition(m_position); // class cocos2d::Camera
auto infoPanel = m_params->getGameInfoDelegate(); // class GameInfo
if(infoPanel)
{
infoPanel->setMoving(m_position - m_startPosition);
}
}
class GameInfo : public cocos2d::Layer, public GameInfoDelegate
void GameInfo::setMoving(const cocos2d::Vec2 &position)
{
this->setPosition(position);
}
那么,我该如何解决呢?
【问题讨论】:
-
Gifs PC 版:i.imgur.com/DHxcmjc.gif 手机版(质量不好见谅):i.imgur.com/PdyFL5O.gif
标签: c++ cocos2d-x game-development cocos2d-x-3.0