所以,我使用本教程http://www.kilobolt.com/day-5-background-and-sprites/unit-2-day-5-background-and-sprites#comments来创建游戏。我的问题是,我的角色不会动。我认为它的图形没有正确显示,因为Eclipse注册了按键就好了。这是我的StartingClass
package testgame;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
public class StartingClass extends Applet implements Runnable, KeyListener {
private Character character;
private Image image, dude, background;
private URL base;
private Graphics second;
private static Background bg1, bg2;
@Override
public void init() {
super.init();
setSize(480, 800);
setBackground(Color.BLACK);
addKeyListener(this);
setFocusable(true);
Frame frame = (Frame) this.getParent().getParent();
frame.setTitle("Hey man!");
try {
base = getDocumentBase();
} catch (Exception e) {
e.printStackTrace();
}
dude = getImage(base, "data/character.png");
background = getImage(base, "data/background.png");
}
@Override
public void start() {
super.start();
bg1 = new Background(0, 0);
bg2 = new Background(2160, 0);
character = new Character();
}
@Override
public void stop() {
super.stop();
}
@Override
public void destroy() {
super.destroy();
}
public void run() {
while (true) {
character.update();
bg1.update();
bg2.update();
repaint();
try {
Thread.sleep(17);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void update(Graphics g) {
if (image == null) {
image = createImage(this.getWidth(), this.getHeight());
second = image.getGraphics();
}
second.setColor(getBackground());
second.fillRect(0, 0, getWidth(), getHeight());
second.setColor(getForeground());
paint(second);
g.drawImage(image, 0, 0, this);
}
@Override
public void paint(Graphics g) {
g.drawImage(background, bg1.getBgX(), bg1.getBgY(), this);
g.drawImage(background, bg2.getBgX(), bg2.getBgY(), this);
g.drawImage(dude, character.getCenterX() - 61, character.getCenterY() - 63, this);
}
@Override
public void keyPressed(KeyEvent ke) {
switch (ke.getKeyCode()) {
case KeyEvent.VK_UP:
break;
case KeyEvent.VK_DOWN:
break;
case KeyEvent.VK_LEFT:
character.moveLeft();
character.setMovingLeft(true);
break;
case KeyEvent.VK_RIGHT:
character.moveRight();
character.setMovingRight(true);
break;
case KeyEvent.VK_SPACE:
}
}
@Override
public void keyReleased(KeyEvent kr) {
// TODO Auto-generated method stub
switch (kr.getKeyCode()) {
case KeyEvent.VK_UP:
break;
case KeyEvent.VK_DOWN:
break;
case KeyEvent.VK_LEFT:
character.stopLeft();
break;
case KeyEvent.VK_RIGHT:
character.stopRight();
break;
case KeyEvent.VK_SPACE:
}
}
@Override
public void keyTyped(KeyEvent kt) {
// TODO Auto-generated method stub
}
}
和我的角色(机器人)课程:
package testgame;
public class Character {
final int JUMPSPEED = -15;
final int MOVESPEED = 5;
final int GROUND = 382;
private int centerX = 100;
private int centerY = GROUND;
private boolean jumped = false;
private boolean movingLeft = false;
private boolean movingRight = false;
private boolean ducked = false;
private int speedX = 0;
private int speedY = 1;
public void update() {
if (speedX < 0) {
centerX += speedX;
} else if (speedX == 0) {
System.out.println("Don't scroll the background");
} else {
if (centerX <= 150) {
centerX += speedX;
} else {
System.out.println("Scroll the background");
}
}
if (centerY + speedY >= 382) {
centerY = 382;
} else {
centerY += speedY;
}
if (jumped == true) {
speedY += 1;
if (centerY + speedY >= 382) {
centerY = 382;
speedY = 0;
jumped = false;
}
if (centerX + speedX <= 60) {
centerX = 61;
}
}
}
public void moveRight() {
if (ducked == false) {
speedX = MOVESPEED;
}
}
public void moveLeft() {
if (ducked == false) {
speedX = MOVESPEED;
}
}
public void stopRight() {
setMovingRight(false);
stop();
}
public void stopLeft() {
setMovingLeft(false);
stop();
}
public void stop() {
if (isMovingRight() == false && isMovingLeft() == false) {
speedX = 0;
}
if (isMovingRight() == false && isMovingLeft() == true) {
moveLeft();
}
if (isMovingRight() == true && isMovingLeft() == false) {
moveRight();
}
}
public void jump() {
if (jumped == false) {
speedY = -15;
jumped = true;
}
}
public boolean isJumped() {
return jumped;
}
public int getSpeedX() {
return speedX;
}
public int getSpeedY() {
return speedY;
}
public void setCenterX(int centerX) {
this.centerX = centerX;
}
public void setCenterY(int centerY) {
this.centerY = centerY;
}
public void setJumped(boolean jumped) {
this.jumped = jumped;
}
public void setSpeedX(int speedX) {
this.speedX = speedX;
}
public void setSpeedY(int speedY) {
this.speedY = speedY;
}
public int getCenterX() {
// TODO Auto-generated method stub
return 0;
}
public int getCenterY() {
// TODO Auto-generated method stub
return 0;
}
public boolean isMovingRight() {
return movingRight;
}
public boolean isMovingLeft() {
return movingLeft;
}
public void setMovingLeft(boolean movingLeft) {
this.movingLeft = movingLeft;
}
public void setMovingRight(boolean movingRight) {
this.movingRight = movingRight;
}
}