gpt4 book ai didi

java - 我让玩家面向鼠标方向,但因此出现了问题

转载 作者:行者123 更新时间:2023-12-01 19:36:58 25 4
gpt4 key购买 nike

所以基本上我想创建僵尸稍后与它们互动,但是当我绘制它们时,我注意到它们都转向与玩家(鼠标)相同的方向,这与我绘制的所有内容都发生了。我该如何解决这个问题? (为每个僵尸提供独立于鼠标方向的位置)

屏幕.java

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JPanel;

public class Screen extends JPanel implements KeyListener, MouseListener, MouseMotionListener {

private Enemy[] enemy;
private Bullet bullet;
private Player player;

boolean collisionBetweenBnZ = false;

private int mX, mY, key;
private List<Bullet> firedBullets = new ArrayList<Bullet>();

public Screen() {

player = new Player(400, 500);
enemy = new Enemy[10];

for (int i = 0; i < enemy.length; i++) {
enemy[i] = new Enemy();
}

setFocusable(true);
addKeyListener(this);
addMouseMotionListener(this);
addMouseListener(this);

this.requestFocusInWindow();


}

public Dimension getPreferredSize() {

return new Dimension(800, 600);

}

public void paintComponent(Graphics g) {

super.paintComponents(g);

//an obstacle for zombies

g.fillRect(0, 400, 800, 4);

//drawing each bullet as soon as they are added to the list (when pressing mouse button)

for (int i = 0; i < firedBullets.size(); i++) {
firedBullets.get(i).drawBullet(g);
}

//drawing sprites

player.drawPlayer(g);

for (int i = 0; i < enemy.length; i++) {
enemy[i].drawEnemy(g);
}
}

public static int clamp(int num, int min, int max) { //method that prevents you from going beyond the window
if (num >= max) return num = max;
else if (num <= min) return num = min;
else return num;
}

public void fire() {

bullet = new Bullet(player.playerX(), player.playerY());
bullet.updateAngle(mX, mY, player.playerX(), player.playerY());
firedBullets.add(bullet);
}

public void animate() {

while (true) {

try {
Thread.sleep(10); //in milliseconds
}
catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}

player.tick();
/*for (int i = 0; i < )
enemy.tick();*/
//System.out.println("X: " + mX + "\n" + "Y: " + mY);
for (int i = 0; i < firedBullets.size(); i++) {
firedBullets.get(i).launch();
}
//if () getbounds

repaint();
}
}

public void keyTyped(KeyEvent e) {

}

public void keyPressed(KeyEvent e) {

key = e.getKeyCode();

if (key == KeyEvent.VK_A) {
player.setVelX(-2);
}
else if (key == KeyEvent.VK_D) {
player.setVelX(2);
}
else if (key == KeyEvent.VK_S) {
player.setVelY(2);
}
else if (key == KeyEvent.VK_W) {
player.setVelY(-2);
}
else if (key == KeyEvent.VK_SPACE) {
//bullet.shootBullet = true;
}
else if (key == KeyEvent.VK_A && key == KeyEvent.VK_D) {
player.setVelX(0);
}
else if (key == KeyEvent.VK_W && key == KeyEvent.VK_S) {
player.setVelY(0);
}
}

public void keyReleased(KeyEvent e) {

key = e.getKeyCode();

if (key == KeyEvent.VK_A) {
player.setVelX(0);
}
else if (key == KeyEvent.VK_D) {
player.setVelX(0);
}
else if (key == KeyEvent.VK_S) {
player.setVelY(0);
}
else if (key == KeyEvent.VK_W) {
player.setVelY(0);
}
else if (key == KeyEvent.VK_SPACE) {
//bullet.shootBullet = false;
}
}

@Override
public void mouseDragged(MouseEvent e) {

}

@Override
public void mouseMoved(MouseEvent e) {
mX = e.getX();
mY = e.getY();
player.updateAngle(mX, mY);
repaint();
}

@Override
public void mouseClicked(MouseEvent e) {
fire();

}

@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub

}

@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub

}
}

敌人.java

import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.util.concurrent.ThreadLocalRandom;

public class Enemy {

private int health, width, height;

private int enemyX, enemyY, velY;

private BufferedImage img;

public Enemy() {

try {
img = ImageIO.read(new File("/Users/david/Desktop/Enemy_Sprite.png"));
} catch (IOException e) {
e.printStackTrace();
}

health = 100;
width = img.getWidth();
height = img.getHeight();

enemyX = ThreadLocalRandom.current().nextInt(50, 750);
enemyY = ThreadLocalRandom.current().nextInt(0, 200);

}
public Rectangle getBounds() {
return new Rectangle(enemyX, enemyY, width, height);
}
public void setVelY(int y) {
velY = y;
}
public void tick() {
enemyY += velY;
}
public boolean obstacleInteraction() {
//if (getBounds() == )
return true;
}

public void drawEnemy(Graphics g) {

g.drawImage(img, enemyX, enemyY, null);

}
}

最佳答案

感谢this person,我明白了。所以基本上在我的代码末尾,我绘制玩家并让他旋转到鼠标位置,放置保存的原始平面位置g.setTransform(oldAT);

关于java - 我让玩家面向鼠标方向,但因此出现了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59205189/

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