2013-02-18 82 views
0

我试图创建一个简单的Android游戏,它的屏幕上有2个操作杆(圆)2D动作射击游戏,左边的一个是运动控制和正确的武器控制。方向由拇指相对于圆心的位置控制。为Android游戏创建“控制杆”?

我一直在关注这个网站的教程:http://www.kilobolt.com/day-7-creating-an-android-game-from-start-to-finish.html,但只给了我基础上下工夫。我没有编程经验,所以我现在很迷茫。

我运动只在TOUCH_DOWN事件的工作,英雄移动到哪里应该,但改变方向我得提高我的拇指和再次触摸圈子。如果我碰到的角色移动非常快的圈拖我的手指TOUCH_DRAGGED(或ACTION_MOVE),是因为打破。我想问题是触摸事件正在处理太多,但我不知道如何解决它。

我怎样才能改变这种做法,我可以拖动周围一圈我的拇指和英雄会立即改变其方向,并保持它的变速恒所有的时间?无论离你接触的圆心有多近还是远,速度都应该是一样的。

private void updateRunning(List<TouchEvent> touchEvents, float deltaTime) { 

    int len = touchEvents.size(); 

    for (int i = 0; i < len; i++) { 
     TouchEvent event = touchEvents.get(i); 
     if (event.type == TouchEvent.TOUCH_DOWN || event.type == TouchEvent.TOUCH_DRAGGED) { 

      if (inBounds(event, 50, 300, 150, 150, 'c')) { 
       ctrl.setX(event.x); 
       ctrl.setY(event.y); 
       ctrl.direction(); 
       hero.move(ctrl.getDirX(), ctrl.getDirY()); 
      } 
     } 

     if (event.type == TouchEvent.TOUCH_UP) { 

      if (inBounds(event, 0, 0, 35, 35,'r')) { 
       pause(); 
      } 
      hero.stopMove(); 
     } 
    } 

    hero.update(); 

运动:英雄的speedX和speedY被添加到英雄的centerX和centerY每个hero.update()调用中。

public void move(float x, float y) { 

    speedX += x * MOVESPEED; 
    speedY += y * MOVESPEED; 

} 

该方法处理速度。在stackoverflow找到它,并且因为touch_down事件工作正常,我猜这是在做它的工作。虽然我觉得它不是应该如此。 L_STICK_C是一个值为100和350(圆的中心)的常量。

public void direction() { 

     dir.x = x - L_STICK_C.x; 
     dir.y = y - L_STICK_C.y; 
     double hyp = Math.sqrt(dir.x * dir.x + dir.y * dir.y); 
     dir.x = (float) (dir.x/hyp); 
     dir.y = (float) (dir.y/hyp); 
} 

回答

1

我建议你看看一些游戏编程教程。您通常不会直接从触摸输入移动字符。你会设置一个游戏状态变量,一旦游戏循环将对应于你的拇指输入的位置。那么你只会根据这些输入更新每个游戏循环的英雄。这可让您保持游戏输入控制代码和英雄代码的独立性,并使其可用于游戏的其他部分。

编辑:

基于您的代码,每次你拖动手指时,你产生了一堆拖事件。因此,您正在为每个事件添加角色速度。您应该只是查看上次触摸事件的输入中心和x/y的距离,而不是全部。

+0

哎呀,我看你是在寻找一个tutorail,是我不好。 – aglassman 2013-02-18 21:39:04