首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为android游戏创建“操纵杆控件”?

为android游戏创建“操纵杆控件”?
EN

Stack Overflow用户
提问于 2013-02-19 05:26:02
回答 1查看 979关注 0票数 0

我正在尝试创建一个简单的Android游戏,一个2D动作射击游戏,有2个控制棒(圆圈)在屏幕上,左边是移动控制,右边是武器控制。方向是由拇指相对于圆心的位置控制的。

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

我让移动只在TOUCH_DOWN事件上工作,英雄移动到它应该移动的地方,但要改变方向,我必须抬起我的拇指,再次触摸圆圈。TOUCH_DRAGGED (或ACTION_MOVE)是坏的,因为如果我在圆圈上拖动我的手指,角色移动得非常快。我猜问题是处理了太多的触摸事件,但我不知道如何解决它。

我如何改变这一点,以便我可以在圆圈周围拖动我的拇指,英雄会立即改变它的方向,并保持它的速度始终不变?此外,速度应该是相同的,无论离你接触的圆的中心有多近或多远。

代码语言:javascript
复制
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();  

运动:每次调用hero.update()时,英雄的speedX和speedY都会添加到英雄的centerX和centerY中。

代码语言:javascript
复制
public void move(float x, float y) {

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

}

此方法处理x&y速度。我在stackoverflow上找到了它,因为touch_down事件工作正常,所以我猜它是在做它的工作。尽管我觉得这不是它应该的样子。L_STICK_C是一个常量,值为100和350 (圆的中心)。

代码语言:javascript
复制
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);
}
EN

回答 1

Stack Overflow用户

发布于 2013-02-19 05:36:01

我建议你研究一些游戏编程教程。您通常不会直接从触摸输入移动字符。您只需在游戏循环中设置一个游戏状态变量,该变量将与拇指输入的位置相对应。然后你只需要根据这些输入在每个游戏循环中更新英雄一次。这让你可以保持游戏输入控制代码和英雄代码的分离,并使其可用于游戏的其他部分。

编辑:

根据您的代码,每次拖动手指时,都会生成一系列拖动事件。所以你为每个事件增加了角色的速度。您可能只需要查看最后一次触摸事件中输入的到中心的距离和x/y,而不是全部。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14945551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档