我想使用核心运动在sprite工具包中移动sk-sprite节点。我希望它会像在游戏中一样倾斜。我的意思是我想倾斜设备以改变节点的位置。 我该怎么办? 谢谢。如何用核心运动来移动Sksprite节点? (sprite kit)
-1
A
回答
1
Tuts +上有一个优秀的tutorial,演示了在SpriteKit游戏中使用加速计。是的,你必须做什么亮点如下:
首先,导入CoreMotion库:
#import <CoreMotion/CoreMotion.h>
声明一个CMMotionManager属性现场
@property (strong, nonatomic) CMMotionManager *motionManager;
在-initWithSize:
方法,实例化运动管理器
//CoreMotion
self.motionManager = [[CMMotionManager alloc] init];
self.motionManager.accelerometerUpdateInterval = .2;
[self.motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue currentQueue]
withHandler:^(CMAccelerometerData *accelerometerData, NSError *error) {
[self outputAccelertionData:accelerometerData.acceleration];
if(error)
{
NSLog(@"%@", error);
}
}];
你将开始将加速度计数据沿着x和y轴获取到outputAccelertionData:
方法。
用它来移动节点。
1
1)添加CoreMotion框架到您的项目
2)使用基本的代码示例使用移动一个CoreMotion SKSpriteNode。
#import "GameScene.h"
#import <CoreMotion/CoreMotion.h>
@implementation GameScene {
CMMotionManager *motionManager;
CMDeviceMotion *devMotion;
SKSpriteNode *node0;
}
-(void)didMoveToView:(SKView *)view {
self.backgroundColor = [SKColor blackColor];
motionManager = [[CMMotionManager alloc] init];
[motionManager startDeviceMotionUpdates];
[motionManager setDeviceMotionUpdateInterval:1.0/30.0];
devMotion = motionManager.deviceMotion;
node0 = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(20, 20)];
node0.position = CGPointMake(300, 300);
node0.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:node0.size];
node0.physicsBody.dynamic = YES;
node0.physicsBody.affectedByGravity = NO;
[self addChild:node0];
}
-(void)update:(CFTimeInterval)currentTime {
CMDeviceMotion *currDeviceMotion = motionManager.deviceMotion;
//NSLog(@"Roll Pitch and Yaw are %f, %f, %f",currDeviceMotion.attitude.roll, currDeviceMotion.attitude.pitch, currDeviceMotion.attitude.yaw);
// update position using CGPointMake
if(currDeviceMotion.attitude.pitch > 0.10) {
node0.position = CGPointMake(node0.position.x+1, node0.position.y);
}
if(currDeviceMotion.attitude.pitch < -0.10) {
node0.position = CGPointMake(node0.position.x-1, node0.position.y);
}
if(currDeviceMotion.attitude.roll > 0.10) {
node0.position = CGPointMake(node0.position.x, node0.position.y+1);
}
if(currDeviceMotion.attitude.roll < -0.10) {
node0.position = CGPointMake(node0.position.x, node0.position.y-1);
}
/*
// update position using CGVectorMake
if(currDeviceMotion.attitude.pitch > 0.10) {
node0.physicsBody.velocity = CGVectorMake(node0.physicsBody.velocity.dx+10, node0.physicsBody.velocity.dy);
// set speed limit of 100
if(node0.physicsBody.velocity.dx > 100)
node0.physicsBody.velocity = CGVectorMake(100, node0.physicsBody.velocity.dy);
}
if(currDeviceMotion.attitude.pitch < -0.10) {
node0.physicsBody.velocity = CGVectorMake(node0.physicsBody.velocity.dx-10, node0.physicsBody.velocity.dy);
// set speed limit of 100
if(node0.physicsBody.velocity.dx < -100)
node0.physicsBody.velocity = CGVectorMake(-100, node0.physicsBody.velocity.dy);
}
if(currDeviceMotion.attitude.roll > 0.10) {
node0.physicsBody.velocity = CGVectorMake(node0.physicsBody.velocity.dx, node0.physicsBody.velocity.dy+10);
// set speed limit of 100
if(node0.physicsBody.velocity.dy > 100)
node0.physicsBody.velocity = CGVectorMake(node0.physicsBody.velocity.dx, 100);
}
if(currDeviceMotion.attitude.roll < -0.10) {
node0.physicsBody.velocity = CGVectorMake(node0.physicsBody.velocity.dx, node0.physicsBody.velocity.dy-10);
if(node0.physicsBody.velocity.dy < -100)
node0.physicsBody.velocity = CGVectorMake(node0.physicsBody.velocity.dx, -100);
}
*/
}
@end
+0
好的,谢谢你的帮助 – 100tomer 2015-04-03 23:11:54
相关问题
- 1. OS X上的Sprite Kit - 移动
- 2. 在Sprite Kit中运行棒图动画
- 3. Sprite-kit:运动期间移位的物理体
- 4. Sprite Kit中的弹跳节点
- 5. Sprite kit节点在接触时口吃
- 6. 我如何在sprite工具包中快速移动节点
- 7. 使用核心运动
- 8. SpriteKit + Swift - 如何使用缓动来移动节点?
- 9. Swift 3.0 - Sprite Kit - Multitouch
- 10. SKSprite节点字典/阵列
- 11. Sprite Kit Objective C
- 12. Sprite Kit SKPhysicsJoint
- 13. Sprite-Kit错误
- 14. 移动数组中的所有对象 - IOS和Sprite Kit
- 15. 移动节点
- 16. 如何在pygame中使用光标移动来移动Sprite图像?
- 17. 基本核心动画 - 移动图像
- 18. 如何将节点定位到Sprite Kit中的圆周上的随机点?
- 19. Major Xcode 7 Sprite Kit地图集Bug
- 20. 无法移动Sprite
- 21. Sprite Kit中的简单碰撞
- 22. Sprite Kit中的多点触控手势
- 23. 如何使用根据节点移动方式运行的.xscale?
- 24. 运动的核心动画公式
- 25. XSLT移动节点
- 26. 使用moveAsLastChildOf移动节点
- 27. 无法将节点添加到我的场景(Sprite Kit)
- 28. beginner swift sprite kit - 节点碰撞检测帮助(SKPhysicsContact)
- 29. 模拟两个Sprite Kit节点的万有引力
- 30. Sprite Kit:只为所有场景创建节点一次
我想要一个复活节的焦糖巧克力蛋。到目前为止你尝试了什么,你卡在哪里? – sangony 2015-04-03 13:20:38
我试着用这个 - (void)加速计:(UIAccelerometer *)加速计didAccelerate: – 100tomer 2015-04-03 14:24:20