gpt4 book ai didi

java - if 语句在 Java 中无法正确计算 boolean 值?

转载 作者:行者123 更新时间:2023-12-01 06:44:45 27 4
gpt4 key购买 nike

我正在制作一个简单的游戏,您在屏幕上移动一个球并尝试避开屏幕上的其他 block 。

我遇到的问题是,当我尝试评估您是否正在触摸另一个 block 时,无论我的 boolean 值等于什么,我的 if 语句总是返回第一个结果。这是我评估该语句的方法

public void actionPerformed(ActionEvent evt) {
//Move the ball
myY = myY - 5;
if(myY < 0){
myY = 0;
}
//test if it is intersecting
boolean sect = testIntersection(r, playa);
System.out.println(sect);
if(sect = true){
cir = Color.BLACK;
System.out.println("Intersected");
}else{
cir = Color.RED;
}
playa.setFrame(myX, myY, 30,30);
repaint();
}

这是发送 sect boolean 值的代码部分:

public static boolean testIntersection(Shape shapeA, Shape shapeB) {
Area areaA = new Area(shapeA);

areaA.intersect(new Area(shapeB));
return !areaA.isEmpty();
}

完整代码如下:

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import javax.swing.JFrame;
import javax.swing.Timer;
import java.lang.Object;

public class moving extends Canvas implements ActionListener{
Timer up = new Timer(10, this);
Timer down = new Timer(10, this);
Timer left = new Timer(10, this);
Timer right = new Timer(10, this);
int sected;
int myX = 400;
int myY = 400;
Ellipse2D playa = new Ellipse2D.Double(myX, myY, 30, 30);
Rectangle r = new Rectangle(20,33,20, 100);
boolean sect = testIntersection(r, playa);
Color cir = new Color(0,0,0);

public moving() {
setSize(new Dimension(500, 500));
final int width = getWidth();
final int height = getHeight();
up.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myY = myY - 5;
if(myY < 0){
myY = 0;
}
boolean sect = testIntersection(r, playa);
System.out.println(sect);
if(sect = true){
System.out.println("intersected!!!!!1");
}else{
cir = Color.RED;
}
playa.setFrame(myX, myY, 30,30);
repaint();
}
});
down.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myY = myY + 5;
if(myY > height - 30){
myY = height - 30;
}
boolean sect = testIntersection(r, playa);
System.out.println(sect);
if(sect = true){
System.out.println("intersected");
}else{
cir = Color.RED;
}
playa.setFrame(myX, myY, 30,30);
repaint();
}
});

left.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myX = myX - 5;
if(myX < 0){
myX = 0;
}
boolean sect = testIntersection(r, playa);
System.out.println(sect);
if(sect = true){
System.out.println("intersected");
}else{
cir = Color.RED;
}
playa.setFrame(myX, myY, 30,30);
repaint();
}
});
right.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
myX = myX + 5;
if(myX > width - 30){
myX = width - 30;

}
boolean sect = testIntersection(r, playa);
System.out.println(sect);
if(sect = true){
System.out.println("intersected");
}else{
cir = Color.RED;
}
playa.setFrame(myX, myY, 30,30);
repaint();
}
});
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent evt) {
moveIt(evt);
}
public void keyReleased(KeyEvent evt) {
NomoveIt(evt);
}
});
}



public void moveIt(KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_DOWN:
down.start();
break;
case KeyEvent.VK_UP:
up.start();
break;
case KeyEvent.VK_LEFT:
left.start();
break;
case KeyEvent.VK_RIGHT:
right.start();
break;
}

repaint();
}

public void NomoveIt(KeyEvent evt) {
switch (evt.getKeyCode()) {
case KeyEvent.VK_DOWN:
down.stop();
break;
case KeyEvent.VK_UP:
up.stop();
break;
case KeyEvent.VK_LEFT:
left.stop();
break;
case KeyEvent.VK_RIGHT:
right.stop();
break;
}

repaint();
}

public static void main(String[] args) {
JFrame frame = new JFrame("Basic Game");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
moving ex = new moving();
frame.getContentPane().add(ex);
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
ex.requestFocus();

}
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;

if(sect = true){
g.setColor(cir);
}else{
g.setColor(cir);
}

g2.fill(playa);
g.setColor(Color.black);
g2.fill(r);
}

public static boolean testIntersection(Shape shapeA, Shape shapeB) {
Area areaA = new Area(shapeA);

areaA.intersect(new Area(shapeB));
return !areaA.isEmpty();
}

请告诉我我在这里做错了什么!!!

谢谢!

最佳答案

你需要

if (sect == true) {          // compares sect with true and checks the result

而不是

if (sect = true) {           // sets sect to true and then checks it

甚至更好就是使用

if (sect) {                 // checks sect

关于java - if 语句在 Java 中无法正确计算 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18551891/

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