gpt4 book ai didi

java - 为Android游戏创建 "stick controls"?

转载 作者:行者123 更新时间:2023-12-01 14:50:20 25 4
gpt4 key购买 nike

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

我一直在关注此网站上的教程: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();

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

public void move(float x, float y) {

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

}

此方法处理 x 和 y 速度。在 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);
}

最佳答案

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

编辑:

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

关于java - 为Android游戏创建 "stick controls"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com