gpt4 book ai didi

ios - cocos2d-x-2.2.6/Cocos2dx 2.x加速度计倾斜不起作用

转载 作者:行者123 更新时间:2023-12-01 19:51:11 24 4
gpt4 key购买 nike

直到iOS7加速度计起作用,现在在iOS 10中相同的代码不起作用。

在AccelerometerDelegateWrapper类中,未触发以下函数。

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

在Cocos2dx- 3.x中,它的工作非常完美。如何在Cocos2dx 2.x中修复它?一些命中的CMMotionManager是解决方案,如何将其插入cocos2d 2.x?

最佳答案

我使用CMMotionManager解决了加速问题。

在Cocos2d文件中,AccelerometerDelegateWrapper.h

#define SENSOR_DELAY_GAME 0.04

@interface AccelerometerDispatcher : NSObject<UIAccelerometerDelegate>
{
cocos2d::CCAccelerometerDelegate *delegate_;
cocos2d::CCAcceleration *acceleration_;

CMMotionManager *_motionManager; // Guru Added
}

在AccelerometerDelegateWrapper.mm中
- (id) init
{
acceleration_ = new cocos2d::CCAcceleration();

_motionManager = [[CMMotionManager alloc] init];
_motionManager.accelerometerUpdateInterval = SENSOR_DELAY_GAME;

if (1) // enable accelerometer
{
[_motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue] withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
[self accelerometer:accelerometerData];
}];
}
else
{
[_motionManager stopAccelerometerUpdates];
}

return self;
}

/////New
-(void) setAccelerometerInterval:(float)interval
{
_motionManager.accelerometerUpdateInterval = interval;
}

- (void)accelerometer:(CMAccelerometerData *)accelerometerData
{
if (! delegate_)
{
return;
}

acceleration_->x = accelerometerData.acceleration.x;
acceleration_->y = accelerometerData.acceleration.y;
acceleration_->z = accelerometerData.acceleration.z;
acceleration_->timestamp = accelerometerData.timestamp;

double tmp = acceleration_->x;

switch ([[UIApplication sharedApplication] statusBarOrientation])
{
case UIInterfaceOrientationLandscapeRight:
acceleration_->x = -acceleration_->y;
acceleration_->y = tmp;
break;

case UIInterfaceOrientationLandscapeLeft:
acceleration_->x = acceleration_->y;
acceleration_->y = -tmp;
break;

case UIInterfaceOrientationPortraitUpsideDown:
acceleration_->x = -acceleration_->y;
acceleration_->y = -tmp;
break;

case UIInterfaceOrientationPortrait:
break;
default:
NSAssert(false, @"unknown orientation");
}

delegate_->didAccelerate(acceleration_);
}

/////

- (void) dealloc
{
s_pAccelerometerDispatcher = 0;
delegate_ = 0;
delete acceleration_;
[super dealloc];
}

- (void) addDelegate: (cocos2d::CCAccelerometerDelegate *) delegate
{
delegate_ = delegate;

if (delegate_)
{
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
}
else
{
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}
}

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
if (! delegate_)
{
return;
}

acceleration_->x = acceleration.x;
acceleration_->y = acceleration.y;
acceleration_->z = acceleration.z;
acceleration_->timestamp = acceleration.timestamp;

double tmp = acceleration_->x;

switch ([[UIApplication sharedApplication] statusBarOrientation])
{
case UIInterfaceOrientationLandscapeRight:
acceleration_->x = -acceleration_->y;
acceleration_->y = tmp;
break;

case UIInterfaceOrientationLandscapeLeft:
acceleration_->x = acceleration_->y;
acceleration_->y = -tmp;
break;

case UIInterfaceOrientationPortraitUpsideDown:
acceleration_->x = -acceleration_->y;
acceleration_->y = -tmp;
break;

case UIInterfaceOrientationPortrait:
break;
}

delegate_->didAccelerate(acceleration_);
}

@end

关于ios - cocos2d-x-2.2.6/Cocos2dx 2.x加速度计倾斜不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45829329/

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