我正在做一个简单的游戏,您在屏幕上移动一个球,并尝试避免屏幕上出现其他障碍。
我遇到的问题是,当我尝试评估您是否接触另一个块时,无论我的布尔值等于什么,我的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 布尔值的代码部分:
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
我有一个问题,比较布尔值的if语句不起作用。最后一个if语句,其中notifFlag==true,如果我将它放在那里,它就不起作用了。日志显示notifFlag设置为true,但if语句未运行。但是,如果删除notifFlag==true,则if语句将运行。 带有标志得日志: 没有标志得日志:
问题内容: 我正在寻找一种相对简单的方法(与编写解析器相比)来评估Java中的布尔表达式,并且我不想使用JEP库。 我有一个String表达式,例如:我的目标是用值替换变量。 有没有一种方法可以评估此表达式? 请记住,这可以是任何深度,因此编写解析器将非常复杂。 问题答案: 您可以使用Java6中的脚本引擎,并选择任何流行的脚本语言,例如Scala,Ruby,Python,Groovy和Jav
问题内容: 对象在Python中评估的真值是多少? 相关问题 Python中对象的布尔值:有关覆盖对象评估方式的讨论 问题答案: 可以测试任何对象的真值,以在if或while条件中使用或用作以下布尔运算的操作数。以下值为“假”: 没有 假 任何数值类型的零,例如,,,。 任何空序列,例如,,。 任何空映射,例如。 用户定义的类的实例,如果该类定义了或方法,则该方法返回整数0或bool value时
我似乎不知道为什么我的代码会以我看到的方式运行。我错过了什么? 我希望看到偶数或奇数取决于用户输入的数字?
我在查询两个Oracle数据库时遇到问题。 查询是: (NULL实际上是一个参数,传递给查询,查询可能为空,所以我缩短了查询)。 在生产数据库上,它工作正常,响应为NULL。 在dev DB上,我发现了一个错误,即TRUNC不能应用于NUMBER,需要DATE(ORA-00932)。 显然,生产数据库跳过了OR之后条件中的所有内容,开发人员执行OR之后的部分。 我确实知道通过将CAST(MY_PA
问题内容: 假设我有以下表达式 Eclipse警告我,布尔表达式的第二个短语中可能为空。但是,我知道有些人会在第一个条件失败的情况下完全退出布尔表达式。Java是否正确?还是不能保证评估顺序? 问题答案: 但是,我知道有些人会在第一个条件失败的情况下完全退出布尔表达式。Java是否正确? 是的,这就是所谓的短路评估。操作员喜欢和是执行此类操作的操作员。 还是不能保证评估顺序? 不,可以保证评估的顺