[英]My collision detection algorithm is not working
我有个问题...
我是一个初学者,所以我不了解很多,所以给我一些简单的提示:
if(CharX >= TopFloorX - (TopFloorX/2) && CharX <= TopFloorX + (TopFloorX/2) && CharY >= TopFloorY - (TopFloorY/2) && CharY <= TopFloorY + (TopFloorY/2) || CharX >= MidFloorX - (MidFloorX/2) && CharX <= MidFloorX + (MidFloorX/2) && CharY >= MidFloorY - (MidFloorY/2) && CharY <= MidFloorY + (MidFloorY/2) || CharX >= UndFloorX - (UndFloorX/2) && CharX <= UndFloorX + (UndFloorX/2) && CharY >= UndFloorY - (UndFloorY/2) && CharY <= UndFloorY + (UndFloorY/2) || CharX >= FloorsAPPENDX - (FloorsAPPENDX/2) && CharX <= FloorsAPPENDX + (FloorsAPPENDX/2) && CharY >= FloorsAPPENDY - (FloorsAPPENDY/2) && CharY <= FloorsAPPENDY + (FloorsAPPENDY/2)) {
JOptionPane.showMessageDialog(null, "You Lost!");
}
这是我所有的代码:
/*else if(CharX >= TopFloorX - (TopFloorX/2) && CharX <= TopFloorX + (TopFloorX/2) && CharY >= TopFloorY - (TopFloorY/2) && CharY <= TopFloorY + (TopFloorX/2) || CharX >= MidFloorX - (MidFloorX/2) && CharX <= MidFloorX + (MidFloorX/2) && CharY >= MidFloorY - (MidFloorY/2) && CharY <= MidFloorY + (MidFloorX/2) || CharX >= UndFloorX - (UndFloorX/2) && CharX <= UndFloorX + (UndFloorX/2) && CharY >= UndFloorY - (UndFloorY/2) && CharY <= UndFloorY + (UndFloorX/2) || CharX >= FloorsAPPENDX - (FloorsAPPENDX/2) && CharX <= FloorsAPPENDX + (FloorsAPPENDX/2) && CharY >= FloorsAPPENDY - (FloorsAPPENDY/2) && CharY <= FloorsAPPENDY + (FloorsAPPENDY/2)) {
JOptionPane.showMessageDialog(null, "You Lost!");
}*/
package Puzzlez;
import java.awt.EventQueue;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.ImageIcon;
public class Puzzle extends JFrame {
/**
*
*/
private static final long serialVersionUID = 7856506604378494861L;
private JPanel contentPane;
String title = "SSM";
int CharX = 144;
int CharY = 206;
int CharW = 31;
int CharH = 52;
int GameX = 0;
int GameY = 11;
int GameW = 206;
int GameH = 253;
int DoorX = 10;
int DoorY = 21;
int DoorW = 46;
int DoorH = 68;
int TopFloorX = 0;
int TopFloorY = 93;
int TopFloorW = 134;
int TopFloorH = 2;
int MidFloorX = 84;
int MidFloorY = 149;
int MidFloorW = 46;
int MidFloorH = 2;
int UndFloorX = 0;
int UndFloorY = 203;
int UndFloorW = 112;
int UndFloorH = 7;
//185, 149, 15, 2
int FloorsAPPENDX = 185;
int FloorsAPPENDY = 149;
int FloorsAPPENDW = 15;
int FloorsAPPENDH = 2;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Puzzle frame = new Puzzle();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public Puzzle() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 216, 297);
setResizable(false);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
JLabel Door = new JLabel("");
Door.setIcon(new ImageIcon("C:\\Users\\Lenovo\\JavaProjects\\Puzzles\\src\\Puzzlez\\Door.png"));
Door.setBounds(10, 21, 46, 68);
contentPane.add(Door);
JLabel Character = new JLabel("");
Character.setIcon(new ImageIcon("C:\\Users\\Lenovo\\JavaProjects\\Puzzles\\src\\Puzzlez\\Character.png"));
Character.setBounds(CharX, CharY, CharW, CharH);
contentPane.add(Character);
JLabel GameArea = new JLabel("");
GameArea.setIcon(new ImageIcon("C:\\Users\\Lenovo\\JavaProjects\\Puzzles\\src\\Puzzlez\\GameArea1.png"));
GameArea.setBounds(GameX, GameY, GameW, GameH);
contentPane.add(GameArea);
JLabel Floor = new JLabel("");
Floor.setIcon(new ImageIcon("C:\\Users\\Lenovo\\JavaProjects\\Puzzles\\src\\Puzzlez\\Floor.png"));
Floor.setBounds(0, 93, 134, 2);
contentPane.add(Floor);
JLabel Floors = new JLabel("");
Floors.setIcon(new ImageIcon("C:\\Users\\Lenovo\\JavaProjects\\Puzzles\\src\\Puzzlez\\Floor.png"));
Floors.setBounds(84, 149, 46, 2);
contentPane.add(Floors);
JLabel Floorz = new JLabel("");
Floorz.setIcon(new ImageIcon("C:\\Users\\Lenovo\\JavaProjects\\Puzzles\\src\\Puzzlez\\Floor.png"));
Floorz.setBounds(0, 203, 112, 7);
contentPane.add(Floorz);
JLabel FloorsAPEND = new JLabel("");
FloorsAPEND.setIcon(new ImageIcon("C:\\Users\\Lenovo\\JavaProjects\\Puzzles\\src\\Puzzlez\\Floor.png"));
FloorsAPEND.setBounds(FloorsAPPENDX, FloorsAPPENDY, FloorsAPPENDW, FloorsAPPENDH);
contentPane.add(FloorsAPEND);
setTitle(title);
addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
char keypressed = e.getKeyChar();
switch(keypressed) {
case 'w':
CharY -= 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
else if(CharX >= TopFloorX - (TopFloorX/2) && CharX <= TopFloorX + (TopFloorX/2) && CharY >= TopFloorY - (TopFloorY/2) && CharY <= TopFloorY + (TopFloorY/2) || CharX >= MidFloorX - (MidFloorX/2) && CharX <= MidFloorX + (MidFloorX/2) && CharY >= MidFloorY - (MidFloorY/2) && CharY <= MidFloorY + (MidFloorY/2) || CharX >= UndFloorX - (UndFloorX/2) && CharX <= UndFloorX + (UndFloorX/2) && CharY >= UndFloorY - (UndFloorY/2) && CharY <= UndFloorY + (UndFloorY/2) || CharX >= FloorsAPPENDX - (FloorsAPPENDX/2) && CharX <= FloorsAPPENDX + (FloorsAPPENDX/2) && CharY >= FloorsAPPENDY - (FloorsAPPENDY/2) && CharY <= FloorsAPPENDY + (FloorsAPPENDY/2)) {
JOptionPane.showMessageDialog(null, "You Lost!");
}
break;
case 'W':
CharY -= 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
break;
case 'a':
CharX -= 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
break;
case 'A':
CharX -= 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
break;
case 's':
CharY += 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
break;
case 'S':
CharY += 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
break;
case 'd':
CharX += 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
break;
case 'D':
CharX += 10;
Character.setBounds(CharX, CharY, CharW, CharH);
if(CharX >= DoorX - (DoorX/2) && CharX <= DoorX + (DoorX/2) && CharY >= DoorY - (DoorY/2) && CharY <= DoorY + (DoorY/2)) {
JOptionPane.showMessageDialog(null, "You Won!");
}
break;
case 'u':
break;
case 'U':
break;
case 'o':
break;
case 'O':
break;
default:
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
});
}
}
碰撞检测算法不起作用(显示在顶部)。
请帮我。
我还在努力,所以不要介意未完成的工作。
提示标准:
初学者友好
不会分散到许多文件中
** 所有以大写字母X,Y,W和H结尾的变量都应视为常量 **
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.