我正在尝试创建一个简单的Android游戏,一个2D动作射击游戏,屏幕上有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();
运动:英雄的speedX和speedY被添加到每个hero.update()调用的英雄的centerX和centerY。
public void move(float x, float y) {
speedX += x * MOVESPEED;
speedY += y * MOVESPEED;
}
这种处理x&amp; amp;的方法你的速度。在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);
}
答案 0 :(得分:1)
我建议你看看一些游戏编程教程。您通常不会直接从触摸输入移动角色。你可以在游戏循环中设置一个游戏状态变量,它对应于拇指输入的位置。然后你只能根据这些输入在每个游戏循环中更新一次英雄。这使您可以保持游戏输入控制代码和英雄代码分离,并使其可以重复用于游戏的其他部分。
编辑:
根据您的代码,每次拖动手指时,都会生成一堆拖动的事件。所以你要为每个事件增加你的角色速度。你应该只是看看最后一次触摸事件的中心距离和输入的x / y,而不是全部。