无法移动我的角色

时间:2010-06-04 19:38:25

标签: iphone objective-c uiimageview

当我点击按钮时,我正在尝试移动UIImageView。我已经设置了一个UIIAction来启动NSTimer。点击按钮时,角色(UIImageView)移动正常。当我再次点击相同的按钮时,角色会加速等等,所以最终他的速度达到了10亿英里/小时。我该如何解决这个问题?这是代码:

-(void)animateCharRight:(NSTimer *)theTimer 
{

    float speed;

    if (speed > 10.0f) 
    {

        speed = 10.0f;

    } 
    else 
    {

        speed = 10.0f;

    }

    CGRect rect = [character frame];
    rect.origin.x += speed;
    [character setFrame:rect];
}

此外,当您按下相反按钮后按相反按钮时,它会因为没有取消另一个计时器而错误。我该怎么做?

如何访问按键事件?我似乎无法找到它。

4 个答案:

答案 0 :(得分:2)

你在方法中声明速度并且不要将它设置为任何东西。因此总是将其他速度设置为10.0f。因为你在if和else中都将它设置为10,那么if语句的重点是什么?

然后你rect.origin.x += speed;或者一直添加10个原点,没有例外。它与执行rect.origin.x += 10;相同。图像将不断移动。

速度总是为10,并且总是添加到rect.origin.x你想让速度变成实例变量而不仅仅是在方法中吗?

修改

因为每次将0作为值时,都会在方法中声明速度。然后将其设置为10.如果您将速度创建为成员变量,则每次调用animateCharRight时都可以执行类似

的操作
speed += speedIncrementAmount;

speed += 1.0f;

每次速度增加1个单位或游戏所需的时间。

然后根据你的逻辑,你需要进行几次检查。

if (speed > 10.0f) 
{
    // This will clamp the speed at 10.0f;
    speed = 10.0f;
}

if (speed < - 10.0f) 
{
    // This will make sure you will never go left to quickly
    speed = - 10.0f;
}

以上if语句可能有效,也可能无效。取决于使用。如果游戏是侧边小人,你只想向右移动,那么你可能想要确保速度永远不会低于0.

想想你想要的设计。

由于您不熟悉游戏编程,我将从教程开始,并以本教程中学到的技能为基础。 Here是我在Google快速搜索中找到的link

记住没有人像第一场比赛一样制造毁灭战士。每个人都以破砖者或俄罗斯方块开头,这是游戏编程的“Hello World”。

答案 1 :(得分:2)

听起来你可能会在每个按钮上启动一个新计时器。因此,在2次点击后,您现在有2个计时器,每个计时器将调用-animateCharRight:移动您的视图10,总共20个。更多点击,更快,等等。那是怎么回事?

答案 2 :(得分:1)

我认为你的问题是当你释放移动键时你没有将速度设置回零。您应该在keyup事件触发后立即重置,或者如果您希望角色在释放键后保持移动一段时间,则可以在计时器到期后将速度设置为零。

答案 3 :(得分:1)

该方法将始终将您的角色移动10.但是,每次按下按钮时,您似乎都在启动新的计时器。因此,如果您按下按钮3次,角色将移动3x10 = 30。您需要取消现有的计时器,因此始终只有一个计时器。

您可以使用NSTimer取消[timer invalidate]个实例。 (See here