gpt4 book ai didi

java - 对撞机(java处理)

转载 作者:行者123 更新时间:2023-11-30 06:42:20 25 4
gpt4 key购买 nike

我正在尝试制作一款基本游戏,在该游戏中,玩家通过击中一个物体而失去生命。按照我编写代码的方式,每次对象和玩家接触时都会发生这种情况。我希望玩家只失去一条生命,而不是全部。知道如何解决吗?谢谢

  void colision() {
for ( int i = 0; i<cant; i++ ) {


if ( personaje.x > o[i].x && personaje.x < o[i].x + o[i].tam &&
personaje.y > o[i].y && personaje.y < o[i].y + o[i].tam/2) {

//if( dist(personaje.x, personaje.y, o[i].x, o[i].y ) < (personaje.ph/2 + o[i].tam/2) ){

personaje.restarVida();
personaje.reiniciar();

}
}
}

最佳答案

Kevin 关于将角色击退的建议很棒:这将确保碰撞条件每次碰撞只为真一次,而不是一直持续到角色移开为止。您可能需要存储碰撞发生之前之前的位置。

另一种不击退角色的变体是有一个 boolean 变量来跟踪角色之前是否被击中。如果角色当前被击中但之前没有被击中,那么您只能减去生命。

这是一个基于您的代码的片段作为概念证明:

void colision() {
for ( int i = 0; i < cant; i++ ) {

boolean estChocando = personaje.x > o[i].x && personaje.x < o[i].x + o[i].tam &&
personaje.y > o[i].y && personaje.y < o[i].y + o[i].tam/2;

if (estChocando && !personaje.estabaChocando) {

//if( dist(personaje.x, personaje.y, o[i].x, o[i].y ) < (personaje.ph/2 + o[i].tam/2) ){

personaje.restarVida();
personaje.reiniciar();

// remember the character was hit, so this condition won't be met the next time around
personaje.estabaChocando = true;

}

// reset character was hit flag if no longer colliding
if(!estChocando && personaje.estabaChocando){
personaje.estabaChocando = false;
}

}
}

这假设您已经在您的角色类中定义了 boolean estabaChocando;

我个人同意 Kevin 的建议,将角色击退,因为视觉上很容易理解,增加了游戏的物理/真实感,并且在许多经典游戏中如此普遍,它基本上是 affordance .

这是一个基于上述的例子:

void colision() {
for ( int i = 0; i < cant; i++ ) {

boolean estChocando = personaje.x > o[i].x && personaje.x < o[i].x + o[i].tam &&
personaje.y > o[i].y && personaje.y < o[i].y + o[i].tam/2;

if (estChocando) {

//if( dist(personaje.x, personaje.y, o[i].x, o[i].y ) < (personaje.ph/2 + o[i].tam/2) ){

personaje.restarVida();
personaje.reiniciar();

// restore character to last non-collision position
personaje.x = personaje.px;
personaje.y = personaje.py;

}

// update position to restore to
if(!estChocando){
personaje.px = personaje.x;
personaje.py = personaje.y;
}

}
}

以上假设您将添加 pxpy 属性以及 x,y 到字符类 (从中实例化 personaje

这个特定的实现可能是防弹的,因为它没有考虑角色和游戏对象移动的方向。

另一种方式是开始 using vectors一开始可能会让人感到害怕,但它们玩起来真的很有趣,而且对整体游戏开发非常有用。

如果您要使用 vector ,您可以很容易地将角色的位置增加负速度(甚至是负速度的倍数),以将角色踢向相反的行进方向(一定量):

megaman being hit

关于java - 对撞机(java处理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53602891/

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