Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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

ja genau ich will ne kollision zwischen kreis und rechteck.

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

Matze

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.