我正在编写一个小游戏。我已经通过倾斜手机让我的角色正在移动。现在,当我触摸屏幕时,我希望我的角色(作为Spritenode的图像)跳跃。当我在跳跃时倾斜手机时,我仍然希望他左右移动。最好的方法是什么?我正在考虑制作一个物理世界,然后给他一个质量并激活重力。
但是当我触摸屏幕时如何让他跳一次?
我会为所有答案感到高兴。
感谢。
答案 0 :(得分:1)
问题是:你真的需要物理吗?
这取决于你想要对游戏做什么
Physic让你的游戏更加逼真,但这就是你需要的吗?
你的角色有速度关联,基本上是一个X和Y速度的矢量。这个速度应用于游戏循环的每一帧。为了模拟重力,你移除了非常少量的Y速度,因此它将逐渐开始逐渐下降,越来越快。 如果你想让你的角色跳跃,只需施加相对较高的Y速度。
您可能希望子类化SKNode以添加力度属性,因此您始终可以知道并将其应用于他在游戏循环中的位置,只需考虑将现有的水平移动机制应用于速度。
Physic为你处理所有的速度,力,角速度,物理循环.... 如果你想使用物理,那么网上有很多教程。
您还可以浏览Game Development Stack Overflow Community
将SKActions替换为物理:
if(shouldMove) {
SKAction *action = [SKAction moveTo:CGPointMake(destX, destY) duration:1];
[self.sanchez runAction:action];
}
通过
if(shouldMove) {
[self.sanchez.physicsBody applyForce:CGVectorMake(data.acceleration.y * kPlayerSpeed, 0)];
}
答案 1 :(得分:0)
是的,建立一个物理世界,给你的角色一个物理身体是一个好主意。 为了让他跳跃,只需使用以下方法施加力:
[yourCharacter.physicsBody applyImpulse:vector]
其中vector是CGVector。 仔细考虑你为角色的物理身体设置的属性,他们可能会很棘手。 您将不得不在物理世界的属性和角色的物理主体属性之间稍微调整一下,以获得所需的结果。
如果有什么不清楚,请告诉我
修改
你的-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
方法中的将冲动应用于你的角色
答案 2 :(得分:0)
使用此
创建英雄课程+(id)hero
{
Hero *hero = [Hero spriteNodeWithImageNamed:@"HeroStand"];
hero.name =@"Hero";
hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hero.size];
return hero;
}
...
-(void)Jump
{
if(!self.isJumping)
{
[self.physicsBody applyImpulse:CGVectorMake(10,180)];
[self runAction:[SKAction playSoundFileNamed:@"onJump.wav" waitForCompletion:NO]];
self.isJumping = YES;
}
}
然后在场景中创建英雄实例
hero = [Hero hero];
[world addChild:hero];
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
/* Called when a touch begins */
[hero Jump];
}