微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java游戏 - 2个字符之间的冲突问题

如何解决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;
    }




}

我在其中调用方法的 GameState 类。

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 举报,一经查实,本站将立刻删除。