如何解决Java游戏 - 2个字符之间的冲突问题
我正在基于图块用 Java 实现一个 2d 游戏,但我遇到了英雄(兔子)和敌人(蛇)之间的碰撞问题。
我想实现碰撞,当蛇碰到兔子时兔子就会死。因此,为此我在蛇上创建了一个矩形,在兔子上创建了其他矩形,然后我使用了相交方法。在我的代码中,当蛇碰到兔子时,我写了一条消息“碰撞”,但是当我开始游戏时,即使这两个字符没有碰撞,也会出现“碰撞”消息。就像这两个矩形中的一个具有地图的尺寸。
snake 类和 Player 类扩展了 Creature 类,后者扩展了 Entity 类。
蛇类
FOREIGN KEY constraint Failed
播放器类
package Bunnyfights.Entities.Creatures;
import Bunnyfights.Handler;
import Bunnyfights.States.GameState;
import Bunnyfights.Tiles.Tile;
import Bunnyfights.gfx.Assets;
import javax.sql.rowset.spi.XmlReader;
import java.awt.*;
import java.awt.image.BufferedImage;
public class Snake extends Creature {
private BufferedImage image;
private boolean isDead,heroDead;
public Snake(Handler handler,float x,float y) {
super(handler,x,y,DEFAULT_CREATURE_WIDTH,DEFAULT_CREATURE_HEIGHT);
bounds.x = 16;
bounds.y = 32;
bounds.width = 32;
bounds.height = 32;
}
@Override
public void tick() {
if(isDead)
return;
move();
//update collision bounds location
// bounds.x = (int) x;
// bounds.y = (int) y;
}
@Override
public void render(Graphics g) {
if(isDead)
return;
// Render the snake
g.drawImage(image,(int)(x - handler.getGameCamera().getxOffset()),(int)(y - handler.getGameCamera().getyOffset()),width,height,null);
// The snake Rectancle
g.setColor(Color.black);
g.fillRect((int)(x + bounds.x - handler.getGameCamera().getxOffset()),(int)(y + bounds.y - handler.getGameCamera().getyOffset()),bounds.width,bounds.height);
}
public void die(){
isDead = true;}
public void movetoPlayer(Player player) {
float deltaX = player.getX() - this.getX();
float deltaY = player.getY() - this.getY();
float hyp = (float) Math.sqrt(deltaX*deltaX + deltaY*deltaY);
deltaX /= hyp;
deltaY /= hyp;
this.setxMove(deltaX * speed);
this.setyMove(deltaY * speed);
}
public void rotateSnake(Player player) {
if (((player.getX() < (this.getX()+50)) && (player.getX() > (this.getX()-50))) && player.getY() > this.getY()) {
image = Assets.snakeFace;
}
else if (player.getX() > (this.getX()+50)) {
image = Assets.snakeRight;
}
else {
image = Assets.snakeLeft;
}
if (((player.getX() < (this.getX()+50)) && (player.getX() > (this.getX()-50))) && player.getY() < this.getY()) {
image = Assets.snakeBack;
}
}
public void snakePlayerRelation(Player player) {
tick();
movetoPlayer(player);
rotateSnake(player);
}
public boolean getDead() {
return isDead;
}
@Override
public Rectangle getBounds() {
return bounds;
}
}
package Bunnyfights.Entities.Creatures;
import Bunnyfights.Handler;
import Bunnyfights.States.GameState;
import Bunnyfights.Tiles.Tile;
import Bunnyfights.gfx.Assets;
import javax.sql.rowset.spi.XmlReader;
import java.awt.*;
import java.awt.image.BufferedImage;
public class Snake extends Creature {
private BufferedImage image;
private boolean isDead,bounds.height);
}
public void die(){
isDead = true;}
public void movetoPlayer(Player player) {
float deltaX = player.getX() - this.getX();
float deltaY = player.getY() - this.getY();
float hyp = (float) Math.sqrt(deltaX*deltaX + deltaY*deltaY);
deltaX /= hyp;
deltaY /= hyp;
this.setxMove(deltaX * speed);
this.setyMove(deltaY * speed);
}
public void rotateSnake(Player player) {
if (((player.getX() < (this.getX()+50)) && (player.getX() > (this.getX()-50))) && player.getY() > this.getY()) {
image = Assets.snakeFace;
}
else if (player.getX() > (this.getX()+50)) {
image = Assets.snakeRight;
}
else {
image = Assets.snakeLeft;
}
if (((player.getX() < (this.getX()+50)) && (player.getX() > (this.getX()-50))) && player.getY() < this.getY()) {
image = Assets.snakeBack;
}
}
public void snakePlayerRelation(Player player) {
tick();
movetoPlayer(player);
rotateSnake(player);
}
public boolean getDead() {
return isDead;
}
@Override
public Rectangle getBounds() {
return bounds;
}
}
另一件奇怪的事情是,如果你在tick方法中查看snake和player类,我有2条注释指令应该更新矩形坐标。如果我删除这些评论,碰撞正在起作用,但我的玩家上不再有矩形,矩形的移动速度比玩家快。
这是一个视频:
https://www.youtube.com/watch?v=kTJ1O9t-jP4
蛇形矩形也是黑色的,这就是你看不到它的原因,背景是绿色的,但录音机把它变成了黑色。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。