所以我一直试图创造一个小游戏" frogger"只有我用过训练师而不是青蛙和口袋妖怪代替汽车。很简单。到目前为止,我已经按计划移动和重置所有内容,但是当我尝试确定训练师和口袋妖怪的重叠时,问题就出现了。目前我有编码,它获得每个的X和Y坐标,如果它们彼此相等,那么训练师将重置为开头。显然我意识到这意味着教练只有在X和Y完全相同的情况下才会重置,尽管它们是否重叠。所以我试着这样做,如果训练师在get.X()和get.Y()的范围内,但那不起作用。任何帮助/建议将不胜感激。在编程方面,我并不是那么聪明,我只是把它作为一种爱好,所以请尽可能简化术语:P
Thread t = new Thread(new MainLoop());
t.start();
}
private class MyKeyListener extends KeyAdapter{
public void keyPressed(KeyEvent e){
switch (e.getKeyCode()){
case KeyEvent.VK_LEFT:
leftKey = true;
break;
case KeyEvent.VK_RIGHT:
rightKey = true;
break;
case KeyEvent.VK_UP:
upKey = true;
break;
case KeyEvent.VK_DOWN:
downKey = true;
break;
}
}
public void keyReleased(KeyEvent e){
switch (e.getKeyCode()){
case KeyEvent.VK_LEFT:
leftKey = false;
break;
case KeyEvent.VK_RIGHT:
rightKey = false;
break;
case KeyEvent.VK_UP:
upKey = false;
break;
case KeyEvent.VK_DOWN:
downKey = false;
break;
}
}
}
public class MainLoop implements Runnable{
public MainLoop(){
}
public void run(){
while(true){
if(upKey){ trainer.moveUp();
pikachu.run();
squirtle.run();
golbat.run();
snivy.run();
snorlax.run();
bulbasaur.run();
jolteon.run();
espeon.run();
charmander.run();
sableye.run();
gardevoir.run();
manectric.run();}
if(downKey){ trainer.moveDown();
pikachu.run();
squirtle.run();
golbat.run();
snivy.run();
snorlax.run();
bulbasaur.run();
jolteon.run();
espeon.run();
charmander.run();
sableye.run();
gardevoir.run();
manectric.run();}
if(leftKey){ trainer.moveLeft();
pikachu.run();
squirtle.run();
golbat.run();
snivy.run();
snorlax.run();
bulbasaur.run();
jolteon.run();
espeon.run();
charmander.run();
sableye.run();
gardevoir.run();
manectric.run();}
if(rightKey){ trainer.moveRight();
pikachu.run();
squirtle.run();
golbat.run();
snivy.run();
snorlax.run();
bulbasaur.run();
jolteon.run();
espeon.run();
charmander.run();
sableye.run();
gardevoir.run();
manectric.run();}
if (trainer.getPy() == squirtle.getPy() & trainer.getPx() == squirtle.getPx()){
// if (squirtle.getPy() - 10 <= trainer.getPy() <= squirtle.getPy() +10 & squirtle.getPx() - 10 <= trainer.getPx() <= squirtle.getPx() +10 ){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == pikachu.getPy() & trainer.getPx() == pikachu.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == golbat.getPy() & trainer.getPx() == golbat.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == snivy.getPy() & trainer.getPx() == snivy.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == snorlax.getPy() & trainer.getPx() == snorlax.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == bulbasaur.getPy() & trainer.getPx() == bulbasaur.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == jolteon.getPy() & trainer.getPx() == jolteon.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == espeon.getPy() & trainer.getPx() == espeon.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == charmander.getPy() & trainer.getPx() == charmander.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == sableye.getPy() & trainer.getPx() == sableye.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == gardevoir.getPy() & trainer.getPx() == gardevoir.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() == manectric.getPy() & trainer.getPx() == manectric.getPx()){
trainer.dead();
Skully skull = new Skully (trainer.getPx(), trainer.getPy());
}
if (trainer.getPy() <= 25){
}
repaint();
try {
Thread.sleep(40);
}
catch (InterruptedException ex){
}
}
}
}
public void drawScreen(Graphics display){
backBuffer.drawImage(background,0,0,null);
backBuffer.drawImage(Trainer, trainer.getPx(), trainer.getPy(), null);
backBuffer.drawImage(Pikachu, pikachu.getPx(), pikachu.getPy(),null);
backBuffer.drawImage(Manectric, manectric.getPx(), manectric.getPy(),null);
backBuffer.drawImage(Snivy, snivy.getPx(), snivy.getPy(), null);
backBuffer.drawImage(Snorlax, snorlax.getPx(), snorlax.getPy(), null);
backBuffer.drawImage(Bulbasaur, bulbasaur.getPx(), bulbasaur.getPy(), null);
backBuffer.drawImage(Jolteon, jolteon.getPx(), jolteon.getPy(), null);
backBuffer.drawImage(Espeon, espeon.getPx(), espeon.getPy(), null);
backBuffer.drawImage(Charmander, charmander.getPx(), charmander.getPy(), null);
backBuffer.drawImage(Sableye, sableye.getPx(), sableye.getPy(), null);
backBuffer.drawImage(Golbat, golbat.getPx(), golbat.getPy(),null);
backBuffer.drawImage(Gardevoir, gardevoir.getPx(), gardevoir.getPy(), null);
backBuffer.drawImage(Squirtle, squirtle.getPx(), squirtle.getPy(),null);
display.drawImage(frontBuffer,0,0,this);
}
public void update(Graphics display){
drawScreen(display);
}
}
答案 0 :(得分:0)
您应该为游戏中的所有项目设置一个方形区域,并创建一个具有左上角和右下角属性的类。
像这样的东西
public class Square {
private int top, bottom, left, right;
public int getTop() {
return top;
}
public void setTop(int top) {
this.top = top;
}
public int getBottom() {
return bottom;
}
public void setBottom(int bottom) {
this.bottom = bottom;
}
public int getLeft() {
return left;
}
public void setLeft(int left) {
this.left = left;
}
public int getRight() {
return right;
}
public void setRight(int right) {
this.right = right;
}
}
之后你可以使用更大或更小的方法来检查它们是否像这样重叠。
private boolean isOverlapping(Square first, Square second) {
// If first is over second or under second.
if (first.getTop() < second.getBottom() || first.getBottom() > second.getTop()) {
// If First is to the left or to the right of second
if (first.getLeft() > second.getRight() || first.getRight() < second.getLeft()) {
// Return false
return false;
}
}
// Otherwise the two must be overlapping
return true;
}