无法让我的角色在Java applet中移动

时间:2015-10-16 23:30:16

标签: java applet character

所以,我使用本教程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;
    }

}

0 个答案:

没有答案