Cocos2d iPhone: Otočení Sprite pomocí Akcelerometr

hlasů
3

Snažím se otočit sprite pomocí akcelerometru. když jsem se naklonit v pořádku, chci, aby nepatrně otočit doprava, a když jsem náklon vlevo, chci, aby lehce otáčet doleva ...

Díky předem, Reed

Položena 29/09/2010 v 23:19
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

By nemělo být příliš obtížné. Jen někde v kódu, který zpracovává UIAccelerometerDelegatetřídu a aplikovat změny na svých skřítků na základě hodnot, které dostávají prostřednictvím parametrů na – accelerometer:didAccelerate:zpětné volání.

Jsou dokumenty Apple pro třídu delegáta jsou k dispozici na ...

https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIAccelerometerDelegate_Protocol/UIAccelerometerDelegate/UIAccelerometerDelegate.html

Odpovězeno 04/10/2010 v 16:05
zdroj uživatelem

hlasů
9

Jedle off - ve vašem h souboru, který je třeba provést následující proměnné:

UIAccelerationValue accelerationX;
UIAccelerationValue accelerationY;
float currentRawReading;
float calibrationOffset;

Také zajistit, aby vaše h soubor obsahuje:

@interface myViewName : UIViewController <UIAccelerometerDelegate>

Pak ve svém .so souboru těsně pod svými dovozy v pravém horním put:

#define kFilteringFactor 0.05
CGFloat DegreesToRadians(CGFloat degrees) {return degrees * M_PI / 180;};
CGFloat RadiansToDegrees(CGFloat radians) {return radians * 180/M_PI;};

Pak ve svém .so souboru na viewDidLoad funkce put:

UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = 1.0f/60.0f;  

Také přidat následující funkci do svého .so souboru:

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

accelerationX = acceleration.x * kFilteringFactor + accelerationX * (1.0 - kFilteringFactor);
accelerationY = acceleration.y * kFilteringFactor + accelerationY * (1.0 - kFilteringFactor);

// keep the raw reading, to use during calibrations
currentRawReading = atan2(accelerationY, accelerationX);

float rotation = -RadiansToDegrees(currentRawReading);

targetView.transform = CGAffineTransformMakeRotation(-(DegreesToRadians(rotation)));
//targetView.transform = CGAffineTransformRotate(targetView.transform, -(rotation * 3)); //if you want easing
}

budete muset vyladit to trochu vychází z jakého pohledu nebo objekt, který se zaměřujeme - ale to je do značné míry to.

Snad to pomůže,

Michal

Odpovězeno 05/10/2010 v 05:39
zdroj uživatelem

hlasů
0

Ve funkci delegáta akcelerometru jen psát kód - >>

float angleRadians = atanf((float)X_Position / (float)Y_Position);
float angleDegrees = CC_RADIANS_TO_DEGREES(angleRadians);
float cocosAngle = 1 * angleDegrees;
sprite.rotation = cocosAngle;

a vodník dostane otočený do požadovaného úhlu se změnami v hodnotách X_position, Y_Position a úhlu.

Njoy .. :)

Odpovězeno 13/06/2012 v 15:46
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more