0

我是一名游戏开发初学者,我目前在玩游戏时遇到问题....我希望游戏在每次循环时更新画布,以便在单击图像时显示我的角色移动...无效() 在这里对我不起作用,因为它只显示我角色的结束位置这是它的代码:

    @Override
public boolean onTouchEvent(MotionEvent event) {
    final int x = (int)event.getX();
    final int y = (int)event.getY();
    int action = event.getAction();

switch (action) {
    case MotionEvent.ACTION_DOWN:

            if (rollbounds.contains((int)x, (int)y))
            {
                //dice roll
                Random rand = new Random();

                move = rand.nextInt(6) + 1;

                //end of dice roll
                //move counting

                for (int loop=move;loop>0;loop--)
                {
                if ((charypos >= 220)&&(charxpos == 9))
                {
                    Toast toast = Toast.makeText(getContext(), "You Win", Toast.LENGTH_SHORT);
                    toast.show();
                    loop=1;
                }
                if (charxpos != 205&&charLeftMove==false)
                {

                    for (int loop2 = 28;loop2>0;loop2--)
                    {
                        charxpos+=1;
                        //update or invalidate here

                    }

这是一个棋盘游戏,当我触摸滚动按钮时,我会让角色平稳地移动空格数,因为无效会导致它立即移动到结束位置。非常感谢帮助

4

1 回答 1

0

你知道触摸事件实际上是在 UI 线程中吗?即使您调用了无效,画布也不会绘制任何东西,直到您的整个代码块被执行。这意味着系统将在您的代码之后呈现 UI

for (int loop=move;loop>0;loop--)

这就是为什么你发现总是移动到结束位置。您应该将代码移至 case MotionEvent.ACTION_MOVE. 不要在事件中使用循环。只需对每个触摸事件进行一次计算。比如全局声明一个变量,通过touchEvent增加值

int a = 0;

public boolean onTouchEvent(MotionEvent event) {
    final int x = (int)event.getX();
    final int y = (int)event.getY();
    int action = event.getAction();

switch (action) {
    case MotionEvent.ACTION_MOVE:
                ++a;
                invalidate();
于 2013-07-29T02:58:34.623 回答