gpt4 book ai didi

iphone - 使用 iPhone 加速度计沿 x 轴移动 Sprite

转载 作者:搜寻专家 更新时间:2023-10-30 20:25:30 25 4
gpt4 key购买 nike

我正在使用 cocos2d 开发 iPhone 游戏。我正在尝试使用加速度计让 Sprite 在纵向模式下左右移动。出于某种原因,我使用的代码默认向右移动,除非手机倾斜 45 度角,即返回值都是正数(表示它应该向右移动),直到它倾斜 45 度角, 左或右。死点返回到 600 左右,然后随着您向左或向右倾斜手机而减少,直到它达到 45 度角(它达到 0 并开始变为负值)。下面是我正在使用的代码。任何帮助将不胜感激。

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

#define kFilteringFactor 0.75
static UIAccelerationValue rollingX = 0, rollingY = 0, rollingZ = 0;

rollingX = (acceleration.x * kFilteringFactor) +
(rollingX * (1.0 - kFilteringFactor));
rollingY = (acceleration.y * kFilteringFactor) +
(rollingY * (1.0 - kFilteringFactor));
rollingZ = (acceleration.z * kFilteringFactor) +
(rollingZ * (1.0 - kFilteringFactor));

float accelX = rollingX;
float accelY = rollingY;
float accelZ = rollingZ;

CGSize winSize = [CCDirector sharedDirector].winSize;

#define kRestAccelX 0.6
#define kShipMaxPointsPerSec (winSize.height*0.5)
#define kMaxDiffX 0.2

float accelDiffX = kRestAccelX - ABS(accelX);
float accelFractionX = accelDiffX / kMaxDiffX;
float pointsPerSecX = kShipMaxPointsPerSec * accelFractionX;

_shipPointsPerSecX = pointsPerSecX;
NSLog(@"_shipPointsPerSecX: %f", _shipPointsPerSecX);
}

- (void)updateShipPos:(ccTime)dt {

CGSize winSize = [CCDirector sharedDirector].winSize;

float maxX = winSize.width - _ship.contentSize.width/2;
float minX = _ship.contentSize.width/2;

float newX = _ship.position.x + (_shipPointsPerSecX * dt);
newX = MIN(MAX(newX, minX), maxX);
_ship.position = ccp(newX, _ship.position.y);
// NSLog(@"newx: %f", newX);

}

最佳答案

基本上,您的加速度计应该做的是更新加速度(像您一样使用过滤系数)。

但在它旁边你应该保持速度和位置,并在你的预定步骤(float dt)函数中适应这两个,如下所示:

速度+=加速度*dt位置 += 速度 * dt

对 x 和 y 这样做

关于iphone - 使用 iPhone 加速度计沿 x 轴移动 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905871/

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