Hallo, bin neu in der Community, hab schon länger mit diversen Programmiersprachen gearbeitet, muss aber zugeben dass ich mich nie wirklich reingehängt habe. Werde jetzt auch im September beginnen Informatik zu studieren, und dachte mir dass so ein Formu ganz nützlich sein könnten.
So, direkt zum Thema. Das Projekt an dem ich gerade arbeite soll ein kleines 2D Jump'n'Run Spiel werden.
Die Darstellung der Graphicen usw will ich ziemlich simpel halten ( vorerst sinds nur die Rectangles, später werden sich die dann auch noch um die eigene Achse drehen wenn man springt z.B.
Hier einmal der Quellcode zum nachvollziehen:
Class Skill
Class gameLoop, zuständig für den Loop und die KeyInputs
Meine Frage ist nun: wie bekomm ich es her, dass der grüne block nicht immer nur auf die x2 bzw y2 Position zurückgesetzt wird, sondern dass ein neues grünes Rechtech gezeichnet wird, OHNE dass das vorherige Rechteck verschwindet. Also im Prinzip dass ich nicht nur das eine Rechsteck zurücksetzte immer wenn random == 29 ist, sondern, dass ich ein neues Objekt erstelle und dieses dann ebenfalls gezeichnet wird.
Im Prinzip soll dass Spiel dann so funktionieren, dass sich die grünen Blöcke vom rechten Rand her sich nach links bewegen und der Spieler muss auf den Blöcken von links nach rechts Springen und wenn er den Boden berührt stirbt er.
Ich freue mich auf eure Antworten,
danke schonmal
lg See
So, direkt zum Thema. Das Projekt an dem ich gerade arbeite soll ein kleines 2D Jump'n'Run Spiel werden.
Die Darstellung der Graphicen usw will ich ziemlich simpel halten ( vorerst sinds nur die Rectangles, später werden sich die dann auch noch um die eigene Achse drehen wenn man springt z.B.
Hier einmal der Quellcode zum nachvollziehen:
Class Skill
Java:
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
public class Skill extends gameLoop {
public void init(){
setSize(854, 450);
Thread th = new Thread(this);
th.start();
offscreen = createImage(854, 450);
player = offscreen.getGraphics();
block = offscreen.getGraphics();
floor = offscreen.getGraphics();
addKeyListener(this);
}
public void paint(Graphics g){
player.clearRect(0, 0, 854, 450);
player.fillRect(x, y, 20, 20);
block.fillRect (x2, y2, 20, 20);
block.setColor(Color.GREEN);
floor.fillRect(0, 368, 854, 10);
g.drawImage(offscreen, 0, 0, this);
}
public void update(Graphics g){
paint(g);
}
}
Class gameLoop, zuständig für den Loop und die KeyInputs
Java:
import java.awt.event.KeyEvent;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.*;
import java.util.Random;
public class gameLoop extends Applet implements Runnable, KeyListener {
public int x, y, x2, y2;
public Image offscreen;
public Graphics player, floor, block;
public boolean up, down, left, right;
//public BufferedImage background, foreground, player;
//public BufferedImage[] walk = new BufferedImage[19];
public double counter = 5;
public Random rand = new Random();
//public void loadImages() {
//}
public void run() {
x = 100;
y = 100;
x2 = 300;
y2 = 300;
while(true){
int random = rand.nextInt(30);
System.out.println(random);
if (random >= 29) {
x2 = 400;
y2 = 400;
}
y2 += 4;
if (y2 >348) {
y2 = 348;
}
if (y2 == 348){
x2-=2;
}
if (y <= 348 && up != true ){
y+=10;
}
if (up == true)
{
counter += 0.1;
y = (int)( y + (Math.sin(counter) + Math.cos(counter))* 10);
if(counter >= 7)
{
counter = 5;
}
}
if ( right == true) {
x+=2;
}
if ( left == true) {
x-=2;
}
if ( down == true) {
y +=2;
}
if ( y>= 348) {
y = 348;
counter = 4;
}
repaint();
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void keyPressed(KeyEvent e) {
int c = e.getKeyCode();
if (c == KeyEvent.VK_W)
{
if (y==348) {
up = true;
}
}
if (c == KeyEvent.VK_A)
{
left = true;
}
if (c == KeyEvent.VK_D)
{
right = true;
}
if (c == KeyEvent.VK_S)
{
down = true;
}
}
public void keyReleased(KeyEvent e) {
int c = e.getKeyCode();
if (c == KeyEvent.VK_W)
{
up = false;
if (counter >= 5)
{up = false;}
}
if (c == KeyEvent.VK_A)
{
left = false;
}
if (c == KeyEvent.VK_D)
{
right = false;
}
if (c == KeyEvent.VK_D)
{
down = false;
}
}
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
Meine Frage ist nun: wie bekomm ich es her, dass der grüne block nicht immer nur auf die x2 bzw y2 Position zurückgesetzt wird, sondern dass ein neues grünes Rechtech gezeichnet wird, OHNE dass das vorherige Rechteck verschwindet. Also im Prinzip dass ich nicht nur das eine Rechsteck zurücksetzte immer wenn random == 29 ist, sondern, dass ich ein neues Objekt erstelle und dieses dann ebenfalls gezeichnet wird.
Im Prinzip soll dass Spiel dann so funktionieren, dass sich die grünen Blöcke vom rechten Rand her sich nach links bewegen und der Spieler muss auf den Blöcken von links nach rechts Springen und wenn er den Boden berührt stirbt er.
Ich freue mich auf eure Antworten,
danke schonmal
lg See