gpt4 book ai didi

ios - Cocos2d-x Parallax with Accelerometer(如何在到达边缘和改变方向时平稳停止)

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:41 24 4
gpt4 key购买 nike

我正在创建一个具有 3 层背景的游戏。它们被添加到 CCParallaxNode 并通过向右、向左、向上和向下倾斜设备来移动它。我正在使用此代码移动 CCParallaxNode(加速度计委托(delegate)方法 - didAccelerate):

void SelectScreen::didAccelerate(cocos2d::CCAcceleration *pAccelerationValue)
{
float deceleration = 0.1f, sensitivity = 30.0f, maxVelocity = 200;

accelX = pAccelerationValue->x * sensitivity;
accelY = pAccelerationValue->z * sensitivity;

parallaxMovementX = parallaxMovementX * deceleration + pAccelerationValue->x * sensitivity;
parallaxMovementX = fmaxf(fminf(parallaxMovementX, maxVelocity), -maxVelocity);

float offset = -calibration * sensitivity;

parallaxMovementY = (parallaxMovementY * deceleration + pAccelerationValue->z * sensitivity) + offset;
}

然后,在更新方法中:

void SelectScreen::update(float dt)
{
CCNode* node = getChildByTag(100);

float maxX = (Data::getInstance()->getWinSize().width * 2) + 100;
float minX = node->getContentSize().width - 100;

float maxY = Data::getInstance()->getWinSize().height * 0.1f;
float minY = -200;

float diffX = parallaxMovementX;
float diffY = parallaxMovementY;

float newX = node->getPositionX() + diffX;
float newY = node->getPositionY() + diffY;

newX = MIN(MAX(newX, minX), maxX);

newY = MIN(MAX(newY, minY), maxY);

if(isUpdating)
node->setPositionX(newX);
if(isUpdatingY)
node->setPositionY(newY);
}

运动做得很好,但是,当到达 4 个边缘中的任何一个时,它停止 突然。此外,当改变方向(例如向右移动然后向左移动)时,它会突然

问题:我怎样才能做到平滑停止和平滑方向改变(也许是一些小的弹跳效果)?我认为这也与加速度计数据有关(当速度快时,它必须比速度慢时反弹的时间更长)。

提前致谢。

最佳答案

您需要一些数学知识来平滑运动。尝试在此处检查代码: http://www.nscodecenter.com/preguntas/10768/3d-parallax-con-accelerometer

关于ios - Cocos2d-x Parallax with Accelerometer(如何在到达边缘和改变方向时平稳停止),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25369196/

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