Как вы делаете прыжок персонажа, как на объекты, так и просто обычный прыжок? - PullRequest
0 голосов
/ 31 мая 2010

Я новичок в программировании на Java, и у меня в школе есть проект, в котором я собираюсь создать игру, похожую на Icy Tower . И мой вопрос: как мне написать, чтобы персонаж стоял на земле и мог прыгать на предметах?

Вот мой код:

Часть первая

package Sprites;

import java.awt.Image;
import java.awt.event.KeyEvent;

import javax.swing.ImageIcon;

public class jumper {

private String jump = "oka.png";

private int dx;
private int dy;
private int x;
private int y;
private Image image;

public jumper() {
 ImageIcon ii = new ImageIcon(this.getClass().getResource(jump));
 image = ii.getImage();
 x = 50;
 y = 100;
    }

public void move() {
 x += dx;
 y += dy;
}

public int getX() {
 return x;
}

public int getY() {
 return y;
}

public Image getImage() {
 return image;
}



public void keyPressed(KeyEvent e) {
 int key = e.getKeyCode();



 if (key == KeyEvent.VK_LEFT) {
     dx = -5;

     ImageIcon ii = new ImageIcon(this.getClass().getResource("oki.png"));
     image = ii.getImage();
 }

 if (key == KeyEvent.VK_RIGHT){
     dx = 5;

     ImageIcon ii = new ImageIcon(this.getClass().getResource("oka.png"));
     image = ii.getImage();
 }

 if (key == KeyEvent.VK_SPACE) {
     dy = -5;
 }



 if (key == KeyEvent.VK_DOWN) {
     dy = 5;
 }


} 

public void keyReleased(KeyEvent e) {
 int key = e.getKeyCode();


 if (key == KeyEvent.VK_LEFT) {
     dx = 0;
 }

 if (key == KeyEvent.VK_RIGHT){
     dx = 0;
 }

 if (key == KeyEvent.VK_SPACE) {
     dy = 0;
 }



 if (key == KeyEvent.VK_DOWN) {
     dy = 0;
 }
    }

}

Часть вторая

package Sprites;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JPanel;
import javax.swing.Timer;

public class board extends JPanel implements ActionListener {

    private Timer klocka;
    private jumper jumper;

    public board() {

 addKeyListener(new TAdapter());
 setFocusable(true);
 setBackground(Color.WHITE);
 setDoubleBuffered(true);

 jumper = new jumper();

 klocka = new Timer(5, this);
 klocka.start();
    }

    public void paint(Graphics g) {
 super.paint(g);

 Graphics2D g2d = (Graphics2D)g;
 g2d.drawImage(jumper.getImage(), jumper.getX(), jumper.getY(), this);

 Toolkit.getDefaultToolkit().sync();
 g.dispose();
    }

    public void actionPerformed(ActionEvent e) {
 jumper.move();
 repaint();
    }

    private class TAdapter extends KeyAdapter {

 public void keyReleased(KeyEvent e) {
     jumper.keyReleased(e);
    }
 public void keyPressed(KeyEvent e) {
     jumper.keyPressed(e);
 }
  }
}

Часть третья

package Sprites;

import javax.swing.JFrame;

public class RType extends JFrame {
    public RType() {

 add(new board());

 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 setSize(800, 600);
 setLocationRelativeTo(null);
 setTitle("R - type");
 setResizable(false);
 setVisible(true);
    }

public static void main(String[] args) {
    new RType();   

}

}

Я действительно ценю всю помощь, которую я могу получить!

1 Ответ

3 голосов
/ 31 мая 2010

Это может помочь. Это набор учебных пособий, помогающих людям создавать игры на основе плиток. Включая сторонние игровые платформы. См. http://www.tonypa.pri.ee/tbw/tut07.html. Кстати, вы делаете довольно интенсивную загрузку изображений в методах перемещения персонажа. Не делай этого. Сначала кэшируйте изображения. Кроме того, вы можете сделать двойной буфер вашего холста, чтобы сделать его гладким. Подробнее см. Код здесь .

...