繁体   English   中英

我的碰撞检测算法不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM