我在创建一个跳跃系统时遇到了很大的困难,用户可以点击跳跃按钮进行小跳并按住它以获得更高的跳跃。
我偶然发现了这个话题:
https://gamedev.stackexchange.com/questions/13277/variable-height-jumping-in-side-scrollers
这极大地帮助我开发了以下代码:
PlayerMovementTimer = [NSTimer scheduledTimerWithTimeInterval:0.005 target:self selector:@selector(movePlayer) userInfo:nil repeats:YES];
[JumpButton addTarget:self action:@selector(jumpPlayer:) forControlEvents:UIControlEventTouchDown];
[JumpButton addTarget:self action:@selector(stopJump:) forControlEvents:UIControlEventTouchCancel | UIControlEventTouchUpInside | UIControlEventTouchDragExit];
- (void)movePlayer
{
CGFloat playerY = Player.center.y + PlayerYV;
if(playerY > 264) {
PlayerYV = 0;
playerY = 264;
}
if(playerY < 264) {
PlayerYV += 0.048f - PlayerYD;
}
if(HoldingJump && PlayerYV < 0 && PlayerYD + 0.0018f < 0.048f) {
PlayerYD += 0.0018f;
}
Player.center = CGPointMake(Player.center.x + PlayerXV, playerY);
}
- (IBAction)jumpPlayer:(id)sender
{
if(Player.center.y == 264) {
PlayerYD = 0;
PlayerYV = -2.25;
HoldingJump = true;
}
}
- (IBAction)stopJump:(id)sender
{
HoldingJump = false;
}
代码似乎可以工作(一些值需要一些微调,但我还没有解决这个问题)。唯一的问题是运动似乎有点生涩(即使在真实设备上),并且当玩家处于跳跃的顶部时,他们的加速非常缓慢,而且我没有设置任何值似乎能够让跳跃看起来像马里奥游戏一样流畅。
请看一下代码,看看我是否遗漏了一些明显的东西,或者是否有比 NSTimer 调用 void 函数更有效的控制运动的方法。另外,将 UIImageView 的位置设置为浮点值是否不好?
谢谢。