Ping Pong



  • Hi,
    bei meinem "Ping Pong-Spiel" funktioniert die Barriere nicht besonders gut.

    http://mitglied.lycos.de/masterchan/fehler.JPG

    Wie ihr seht, geht der Ball durch den unteren Balkenrand durch. Anders umgekehrt. Wenn der Balken ziemlich weit unten ist, prallt der Ball trotzdem ab, obwohl dazwischen ca 10-15 Pixel frei sind.

    Hier der Quellcode:

    import java.applet.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.JOptionPane;
    
    public class BallDemo extends Applet implements Runnable, KeyListener{
    
    boolean stop = false;
    
    int x_pos = -20;
    int y_pos = 100;
    
    int x_pos2 = 5;
    int y_pos2 = 150;
    
    int radius = 40;
    int x_speed = 2;
    
      public void init()
      {
        setBackground (Color.blue);
        addKeyListener(this);
      }
    
      public void start(){
        Thread th = new Thread (this);
        th.start ();
      }
    
      /*public void update(Graphics g){
        paint(g);
      }*/
    
      public void run ()
      {
         Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
    
         while (true)
         {
               // Neuzeichnen des Applets
               repaint();
    
               /*if(x_pos == 418)
                 x_pos = -20;*/ //Beam me up Scotty
    
               if(x_pos < 0 && stop){
                 JOptionPane.showMessageDialog(this, "Verloren!");
                 break;
               }
    
                /* 8 ist die Hälfte von der Breite des Balkens. 20 ist die Hälfte des radius (was Höhe und Breite entspricht). 
                42 ist die Hälfte von der Höhe des Balkens*/
    
               else if(x_pos <= x_pos2 + 8 && y_pos - 20 <= y_pos2 + 42 && y_pos + 20 >= y_pos2 - 42){
                 x_speed = 2;
               }
    
               else if(x_pos == radius && !stop){
                 x_speed = 2;
                 stop = true;
               }
    
               else if(x_pos == 400 - radius)
                 x_speed = -2;
    
               x_pos += x_speed;
    
               try
               {
    
                 Thread.sleep (20);
               }
               catch (InterruptedException ex)
               {
                     // do nothing
               }
    
               // Zurücksetzen der ThreadPriority auf Maximalwert
               Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
         }
    
       }
    
       public void paint (Graphics g)
       {
    
          // Setzten der Zeichenfarbe auf Rot
          g.setColor (Color.red);
    
          // Zeichen eines gefüllten Kreises
          g.fillOval (x_pos, y_pos, radius, radius);
          g.fillRect(x_pos2, y_pos2, 16, 84);
    
        }
    
        public void keyPressed(KeyEvent taste){
          int i = taste.getKeyCode();
    
          switch(i){
            case KeyEvent.VK_DOWN:
              y_pos2 += 5;
              break;
    
            case KeyEvent.VK_UP:
              y_pos2 -= 5;
              break;
          }
        }
    
        public void keyReleased(KeyEvent e){
        }
    
        public void keyTyped(KeyEvent e){
        }
    }
    

    Liebe Grüße
    Reality



  • Und wie lautet die Frage? 🤡

    Naja, scheint mir als ob Du ein Quadrat um den Ball herum als BoundingVolume hast.
    Mach's halt mit Kreis-Rechteck Kollision anstatt Rechteck-Rechteck Kollision.



  • Nein, meine Frage ist, warum die Barriere bei mir falsch ist. Also der Ball prallt nur an den Balken ab, wenn der Ball mehr oder weniger die Mitte des Balken trifft.

    Liebe Grüße
    Real



  • So muss es heissen:

    else if(x_pos <= x_pos2 + 8 && y_pos <= y_pos2 + 84 && y_pos + 40 >= y_pos2){
                 x_speed = 2;
               }
    

    Liebe Grüße
    Real


Anmelden zum Antworten