Java Fallende Punkte sollen auf bewegendes Rechteck reagieren

Status
Für weitere Antworten geschlossen.
L

Lavrael

Gast
Hallo ComputerBaseCommunity,
ich studiere seid einer Weile Informatik und bin ein ziemlicher Anfänger was Programmieren angeht. Bisher kam ich super mit, doch nun stehe ich vor einem kleinen Problem. Wir sollen mit Processing, das ja auf Java basiert, ein kleines Spiel programmieren. Und zwar soll unten ein kleines Rechteck sein, das sich mit Tasten nach links und rechts bewegen kann, und dassoll die von oben fallenden Kreise auffangen. Das Problem ist, das ich es nicht schaffe das die Kreise auf das Rechteck reagieren. Wenn die Kreise auf das Rechteck treffen, sollen sie verschwinden und irgendwo oben wieder auftauchen. Das Random-Auftauchen und so, habe ich. Nur weiß ich nicht, wie ich das mache das die Kreise auf das Rechteck reagieren. Was ich auch versuche, die gehen einfach mitten durch.
Hoffe ihr könnt behilflich sein ... :(

Code:
float a = random(15,285); //Randomstartpunkt des 1. Kreises auf der X Achse
float b = random(15,285); //Randomstartpunkt des 2. Kreises auf der X Achse
float c = random(15,285); //Randomstartpunkt des 3. Kreises auf der X Achse
float d = 0; //Startpunkt des 1. Kreises auf der Y Achse
float e = random(0,255); //Randomfarbe des 1. Kreises
float f = random(0,255); //Randomfarbe des 2. Kreises
float g = random(0,255); //Randomfarbe des 3. Kreises
float h = 0; //Startpunkt des 2. Kreises auf der Y Achse
float i = 0; //Startpunkt des 3. Kreises auf der Y Achse
float x = 150; //Startpunkt auf der X Achse vom Eimer
float y = 2.5; //Bewegungsgeschwindigkeit des Eimers

void setup() {
  size(300,300);
}

void draw() {
  smooth();
  background(0,255,0);
  rectMode(CENTER); //Rechteckkoordinatenpunkte X & Y werden zentriert
  rect(x,280,60,15);
  fill(e);
  stroke(1);
  ellipse(a,d,30,30); //1. Kreis
  noFill();
  fill(f);
  ellipse(b,h,30,30); //2. Kreis
  noFill();
  fill(g);
  ellipse(c,i,30,30); //3. Kreis
  noFill();
  fill(255);
  noStroke();
  d = d+1.5; //Fallgeschwindigkeit des 1. Kreises
  h = h+1.2; //Fallgeschwindigkeit des 2. Kreises
  i = i+1; //Fallgeschwindigkeit des 3. Kreises
  
  if(d > 300) {
    e = random(0,255);
    a = random(15,285);
    d = 0;
  }
  
  
  if(h > 300) {
    f = random(0,255);
    b = random(15,285);
    h = 0;
  }
  
  if(i > 300) {
    g = random(0,255);
    c = random(15,285);
    i = 0;
  }
  
  if(keyPressed) { //if-Anweisung um den Eimer nach links zu bewegen
    if(key == 'a' || key == 'A') {
      x = x - y;
    }
  }
  
  if(keyPressed) { //if-Anweisung um den Eimer nach rechts zu bewegen
    if(key == 's' || key == 'S') {
      x = x + y;
    }
  }
  
  if(x-30 < 0) { //Der Eimer kann nicht links aus dem Bild
    x = 30;
  }
  
  if(x+30 > 300) { //Der Eimer kann nicht rechts aus dem Bild
    x = 270;
  }
}

Freundliche Grüße,
Lavrael
 
Du kennst die Position der Ellipse und du kennst die Position deines Rechtecks. Von der Ellipse kannst du jederzeit die untere Kante errechnen(einfach Position + Radius, oder, wenn die Position den Mittelpunkt darstellt, Position + Radius/2) und vom Rechteck die obere Kante(auch rechnerisch). Wenn untere Kante Y > obere Kante Y, dann hast du eine "Kollision".
 
Abgesehen davon würde ich dir empfehlen, deinen Variablen aussagekräftigere Namen zu geben. So, wie's im Moment aussieht, muss man sich beim Lesen ständig fragen: "Hää, was war gleich noch mal e und g?"
 
Gab es hier nicht mal eine Hausaufgabenregelung?
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben