gpt4 book ai didi

ios - 当用户在横向模式下翻转 iDevice 时,如何保持 rollY 一致?

转载 作者:行者123 更新时间:2023-11-29 04:44:03 25 4
gpt4 key购买 nike

在我的应用程序中,我将游戏设置为横向模式,允许用户能够翻转设备,游戏自动旋转以匹配角度。当用户将设备向右倾斜时,英雄将向右移动,向左倾斜时,英雄将向左移动。

我已经解决了这部分问题,但是当用户翻转 iDevice 时(由于耳机插孔或扬声器的位置),问题就出现了,应用程序会自动旋转,但 rollY 正在设置英雄的位置.x 要反转。向左倾斜使英雄向右移动,向右倾斜使英雄向左移动。在查看 iDevice 翻转时 AccelY 值的 NSLogs 后,旋转时似乎无法反转position.x?

我想这更像是一个数学问题。

这是我的代码:

-(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;

NSLog(@"accelX: %f, accelY: %f, accelZ: %f", accelX, accelY, accelZ);

CGSize winSize = [CCDirector sharedDirector].winSize;
#define kRestAccelX 0.6
#define kShipxMaxPointsPerSec (winSize.height * 1.0)
#define kMaxDiffX 0.2

#define kRestAccelY 0.0
#define kShipyMaxPointsPerSec (winSize.width * 0.5)
#define kMaxDiffY 0.2

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

float accelDiffY = -accelY;
float accelFractionY = accelDiffY / kMaxDiffY;
float pointsPerSecY = kShipyMaxPointsPerSec * accelFractionY;

_shipPointsPerSecX = pointsPerSecY;
_shipPointsPerSecY = pointsPerSecX;

CCLOG(@"accelX: %f, pointsPerSecX: %f", accelX, pointsPerSecX);
CCLOG(@"accelY: %f, pointsPerSecY: %f", accelY, pointsPerSecY);
}

-(void)updateShipPos:(ccTime)dt
{
CGSize winSize = [CCDirector sharedDirector].winSize;

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

float maxY = winSize.height - _ship.contentSize.height / 2;
float minY = _ship.contentSize.height / 2;

float newX = _ship.position.x + (_shipPointsPerSecX * dt);
float newY = _ship.position.y + (_shipPointsPerSecY * dt);

newX = MIN(MAX(newX, minX), maxX);
newY = MIN(MAX(newY, minY), maxY);

_ship.position = ccp(newX, newY);
}

我的想法是,我试图使pointsPerSecY在向右倾斜时为正,在向左倾斜时为负。问题是,当用户翻转设备时,由于设备被翻转,它们会被颠倒。有没有办法让它在横向翻转时无论方向如何,向右倾斜时保持正值,向左保持负值?

最佳答案

做这样的事情怎么样?

if ([[UIApplication sharedApplication] statusBarOrientaion]==UIInterfaceOrientationLandscapeLeft) {
pointsPerSecY *= -1;
}

关于ios - 当用户在横向模式下翻转 iDevice 时,如何保持 rollY 一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904937/

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