Hallo,
ich habe neulich mal angefangen ein kleinen Spiel(Jump and Run) nach einem Tutorial zu Programmieren.
Wiederholen könnte ich zwar nicht was ich da alles gemacht habe, aber ich hab zumindest alles soweit verstanden. Ich hab jetzt schon einen Spieler der wenn er nach rechts läuft ab einem bestimmten punkt nicht mehr weiter kann, und stattdessen der Hinterfrund nach links verschoben wird.
Meine Frage: wie kann man Hügel bzw solche Plattformen festlegen, dass wenn man draufspringt der Charakter oben stehen bleibt(wie bei Mario)? Es reicht wenn die erstmal Rechteckig sind.
Im Prinzip sowas :
Hier mein bisheriger Code:
Frame:
Spieler:
Board:
Ich bedanke mich schonmal für Antworten!
ich habe neulich mal angefangen ein kleinen Spiel(Jump and Run) nach einem Tutorial zu Programmieren.
Wiederholen könnte ich zwar nicht was ich da alles gemacht habe, aber ich hab zumindest alles soweit verstanden. Ich hab jetzt schon einen Spieler der wenn er nach rechts läuft ab einem bestimmten punkt nicht mehr weiter kann, und stattdessen der Hinterfrund nach links verschoben wird.
Meine Frage: wie kann man Hügel bzw solche Plattformen festlegen, dass wenn man draufspringt der Charakter oben stehen bleibt(wie bei Mario)? Es reicht wenn die erstmal Rechteckig sind.
Im Prinzip sowas :

Hier mein bisheriger Code:
Frame:
Java:
public class Frame {
public Frame(){
JFrame frame = new JFrame();
frame.add(new Board());
frame.setTitle("2D Spiel");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,365);
frame.setVisible(true);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
}
public static void main(String[] args) {
new Frame();
}
}
Spieler:
Java:
public class Spieler{
int x, y, dx, dy, nx, nx2, left;
Image still;
ImageIcon i = new ImageIcon("src/Bilder/SpielerstehtR.png");
ImageIcon i2 = new ImageIcon("src/Bilder/SpielerstehtL.png");
ImageIcon l = new ImageIcon("src/Bilder/Spieler.gif");
ImageIcon l2 = new ImageIcon("src/Bilder/SpielerL.gif");
ImageIcon j = new ImageIcon("src/Bilder/Spielerjump.gif");
public Spieler(){
still = i.getImage();
left = 150;
x = 75;
nx2 = 685;
nx = 0;
y = 172;
}
public void move(){
if (dx != -1){
if (left + dx <= 150){
left = left + dx;
}
else{
x = x + dx;
nx2 = nx2 + dx;
nx = nx + dx;
}
}
else
{
if (left + dx > 0)
left = left + dx;
}
}
public int getX(){
return x;
}
public int getY(){
return y;
}
public Image getImage(){
return still;
}
public void keyPressed(KeyEvent e){
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT){
dx = -1;
still = l2.getImage();
}
if (key == KeyEvent.VK_RIGHT){
dx = +1;
still = l.getImage();
}
if (key == KeyEvent.VK_UP){
dy = 1;
still = j.getImage();
}
}
public void keyReleased(KeyEvent e){
int key = e.getKeyCode();
if (key == KeyEvent.VK_LEFT){
dx = 0;
still = i2.getImage();
}
if (key == KeyEvent.VK_RIGHT){
dx = 0;
still = i.getImage();
}
if (key == KeyEvent.VK_UP){
dy = 0;
still = i.getImage();
}
}
}
Board:
Java:
public class Board extends JPanel implements ActionListener, Runnable{
Spieler p;
Image img;
Timer time;
Thread animator;
int v = 172;
public Board() {
p = new Spieler();
addKeyListener(new AL());
setFocusable(true);
ImageIcon i = new ImageIcon("src/Bilder/Unbenannt.png");
img = i.getImage();
time = new Timer(5, this);
time.start();
}
public void actionPerformed(ActionEvent e) {
p.move();
repaint();
}
boolean k = false;
public void paint(Graphics g) {
if (p.dy == 1 && k == false)
{
k = true;
animator = new Thread(this);
animator.start();
}
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
if ((p.getX() - 590) % 2400 == 0){
p.nx = 0; }
if ((p.getX() - 1790) % 2400 == 0){
p.nx2 = 0; }
g2d.drawImage(img, 685-p.nx2, 0, null);
if (p.getX() >= 590){
g2d.drawImage(img, 685-p.nx, 0, null); }
g2d.drawImage(p.getImage(), p.left, v, null);
}
private class AL extends KeyAdapter{
public void keyReleased(KeyEvent e){
p.keyReleased(e);
}
public void keyPressed(KeyEvent e){
p.keyPressed(e);
}
}
@Override
public void run() {
long beforeTime, timeDiff, sleep;
beforeTime = System.currentTimeMillis();
while(done == false)
{
cycle();
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = 10 - timeDiff;
if (sleep < 0){
sleep = 2; }
try {
Thread.sleep(sleep);
} catch (Exception e){}
beforeTime = System.currentTimeMillis();
}
done = false;
h = false;
k = false;
}
boolean h = false;
boolean done = false;
public void cycle(){
if (h == false) {
v--; }
if (v == 125){
h = true; }
if (h == true && v <= 172){
v++;}
if (v == 172){
done = true;
}
}
}
Ich bedanke mich schonmal für Antworten!