Zum Inhalt springen

Abprallen


Matze1992

Empfohlene Beiträge

hey,

ich hab hier ein Programm, in dem auf der unteren Seite ein Rechteck ist und im feld springt ein Ball herum. Ich habe es jetzt schon 100 mal versucht, dass der Ball, wenn er auf der x-achse das Rechteck nicht berührt und somit den unteren Bildrand berührt, verschwindet. Ich komme einfach nicht weiter könnt ihr mir bitte helfen?

Meine Steuerungsklasse:

package Projekt;

import java.awt.*;

import java.awt.event.*;

import java.awt.image.ImageObserver;

import java.math.*;

import java.awt.Button;

import java.awt.Color;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.Image;

import java.awt.MediaTracker;

import javax.swing.JFrame;

class Steuerung extends Frame implements MouseListener, MouseMotionListener,

ActionListener, Runnable {

Rechteck rechteck = new Rechteck(Color.green.brighter());

Kreis ball = new Kreis(Color.red);

int a=20;

Thread ablauf;

boolean m1=true,m2,m3,m4,m5;

private Image weltall,herz1,herz2,herz3;

private Image dbImage; // Variable für die Doppelpufferung

private Graphics dbg; // Variable für die Doppelpufferung

public Steuerung()

{

super("Cannonball");

setLayout(new FlowLayout());

addMouseListener(this);

addMouseMotionListener(this);

addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent event) {

System.exit(0);

}

});

ablauf = new Thread(this); //Thread wird gestartet

ablauf.start();

weltall = getToolkit().getImage("sterne-bootes-krone-1g.jpg");//Name des Image wird angegeben

MediaTracker mt = new MediaTracker(this);

mt.addImage(weltall, 0);

herz3 = getToolkit().getImage("herz.gif");

MediaTracker mt1 = new MediaTracker(this);

mt1.addImage(herz3, 0);

herz2 = getToolkit().getImage("herz.gif");

MediaTracker mt2 = new MediaTracker(this);

mt2.addImage(herz2, 0);

herz1 = getToolkit().getImage("herz.gif");

MediaTracker mt3 = new MediaTracker(this);

mt3.addImage(herz1, 0);

try {

//Warten, bis das Bild vollständig geladen ist,

mt.waitForAll();

mt1.waitForAll();

mt2.waitForAll();

mt3.waitForAll();

} catch (InterruptedException e) {

//nichts

}

}

public void paint(Graphics g) {

g.drawImage(weltall,-80,20,this); //Position des Bildes

g.drawImage(herz3,7,32,this);

g.drawImage(herz2,42,32,this);

g.drawImage(herz1,77,32,this);

rechteck.paint(g); //Rechteck wird gezeichnet

ball.paint(g); //Ball wird gezeichnet

}

public static void main(String[] args) {

Steuerung Versuch = new Steuerung();

Versuch.setLocation(20, 100);

Versuch.setSize(800, 600);

Versuch.show();

}

public void actionPerformed(ActionEvent e) {

}

public void run() {

while(m1==true){

if(ball.xpos==8){ //Randbegrenzungen werden gesetzt

m2=true;

}

if(ball.xpos==787){

m2=false;

}

if(ball.ypos==39){

m3=true;

}

if(ball.ypos==(rechteck.ypos-rechteck.hoehe)){

m3=false;

}

if(ball.ypos==598){

m4=true;

}

if(m2==true){

ball.setzeXpos(ball.xpos +1); //Flugrichtungen des Balles werden bestimmt

}

if(m2==false){

ball.setzeXpos(ball.xpos -1);

}

if(m3==true){

ball.setzeYpos(ball.ypos +1);

}

if(m3==false){

ball.setzeYpos(ball.ypos -1);

}

if(m4==true){

ball.ypos=-999999;

}

repaint();

try {

Thread.sleep(2,5);

} catch (InterruptedException e)

{

}

}

}

public void mouseClicked(MouseEvent arg0) {

// System.out.println("x-koordinate: " + arg0.getX()); //Bei Klick wird X-Koordinate ausgegeben

// System.out.println("y-koordinate: " + arg0.getY()); //Bei Klick wird Y-Koordinate ausgegeben

}

public void mouseEntered(MouseEvent arg0) {

}

public void mouseExited(MouseEvent arg0) {

}

public void mousePressed(MouseEvent arg0) {

ball.setzeXpos(rechteck.xpos);

ball.setzeYpos(rechteck.ypos);

}

public void mouseReleased(MouseEvent arg0) {

}

public void mouseDragged(MouseEvent arg0) {

}

public void mouseMoved(MouseEvent arg0) {

rechteck.setzeXpos(arg0.getX());

}

/**

* Update - Methode, Realisierung der Doppelpufferung zur Reduzierung des

* Bildschirmflackerns

*/

public void update(Graphics g) {

if (dbImage == null) // Initialisierung des DoubleBuffers

{

dbImage = createImage(this.getSize().width, this.getSize().height);

dbg = dbImage.getGraphics();

}

// Bildschirm im Hintergrund löschen

dbg.setColor(getBackground());

dbg.fillRect(0, 0, this.getSize().width, this.getSize().height);

// Auf gelöschten Hintergrund Vordergrund zeichnen

dbg.setColor(getForeground());

paint(dbg);

// Nun fertig gezeichnetes Bild Offscreen auf dem richtigen Bildschirm

// anzeigen

g.drawImage(dbImage, 0, 0, this);

}

}

Gruß Matze 1992

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ein etwas passender Threadttitel als "Abprallen" wäre hilfreicher

ich hab hier ein Programm, in dem auf der unteren Seite ein Rechteck ist und im feld springt ein Ball herum.

Ein Bild ist immer hilfreicher, als Dein Code.

Ich habe es jetzt schon 100 mal versucht, dass der Ball, wenn er auf der x-achse das Rechteck nicht berührt und somit den unteren Bildrand berührt, verschwindet. Ich komme einfach nicht weiter könnt ihr mir bitte helfen?

Du möchtest erst einmal Dein Problem so beschreiben, dass man es versteht. Ich verstehe überhaupt nicht, was Du möchtest, denn um welches Rechteck geht es, welchen Ball? Ein Rechteck ist 2D, ein Ball 3D, wie soll das Bitte funktionieren, wenn das Rechteck in XY Richtung liegt, dann habe ich in Z keine Koordinate gegen die ich sinnvoll prüfen kann.

Ich denke nach Deinem Code geht es um einen Kreis und Rechteck in 2D und meine Glaskugel sagt mir, dass Du eine Kollisiondedektierung zwischen beiden machen möchtest.

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

j

und der kreis soll dann nach obe abprallen. Aber eben nur, wenn er das rechteck berührt...

Mal es Dir auf !!

Überlege Dir was Du mathematisch brauchst (Hinweis auf Radien und Schnittpunktberechnung) ! Ein Tipp aus der Computergraphik, man modelliert so etwas über Vektoren. Aber wenn es nicht um Effizienz geht, dann funktioniert es auch über einen naiven Ansatz

Dein Problem ist kein Codeproblem, deshalb mache es mit Stift und Papier

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...