Collision with Player

Status
Nicht offen für weitere Antworten.
R

regnäfnA

Gast
Hei leute, ich hab da mal ne frage!

Also ich bastel momentan ein Spiel, in dem es 2 Player gibt, (Player, Player2), diese werden als "Raumschiffe" angezeigt.

nun können beide Raumschiffe sich nach oben,unten,links und rechts bewegen und dabei auch "schießen".

da das ja schon sehr toll aussieht, passiert ja soweit noch nicht viel, doch brauche ich hilfe, eine collisions schleife einzubauen.

hier die stelle, wo der code fehlt:


Code:
   for(int i=0; i<shots2.length; i++)
            {
                if(shots2[i] != null)
                {
                    // move shot
                    shots2[i].moveShot2(shot2Speed);

                   
                    if(shots2[i].getYPos() < 0)
                    {
                        shots2[i] = null;
                    }

                    // test for collision with Player
                }
            }


danke!

MfG regnäfnA[/code]
 

didjitalist

Bekanntes Mitglied
eine kollision liegt dann vor, wenn sich die hüllkurven zweier objekte berühren oder überlappen. genug information? guck dir sonst mal die methoden von java.awt.Polygon als denkanstoss an.
 
R

regnäfnA

Gast
DAS hat mir jetzt nichts gesagt.

auch die Methoden von java.awt.Polygon

welche von den muss ich denn nehmen?!?!?


:bahnhof:
 

Marco13

Top Contributor
didjitalist hat gesagt.:
eine kollision liegt dann vor, wenn sich die hüllkurven zweier objekte berühren oder überlappen.

Umgekehrt. Leider.

Aber die Methode Polygon#contains könnte schon hilfreich sein. Reicht noch nicht für alle Fälle, aber vielleicht für diesen.
 
R

regnäfnA

Gast
mensch...

gebt mir einfach den Code, und ich probier aus, was jetzt richtig ist und was nicht ;D
 

Marco13

Top Contributor
"DEN" Code gibt's halt nicht. Keiner weiß, was DEINE Shots sind, und DEINE Player....

Bzgl "Umgekehrt": Wo-ho- vielleicht habe ich das Wort "Hüllkurve" etwas übereifrig als "Konvexe Hülle" überinterpretiert weil IMHO nicht klar ist, was mit der "Hüllkurve eines Polygons" gemeint sein soll - wenn du schlicht und einfach die Polygone selbst (bzw. die polygonalen Flächen) meintest, stimmt das natürlich...
 
A

anfängerasdasd

Gast
hier der code:
Code:
import java.applet.*;
import java.awt.*;
import java.net.*;

public class Main extends Applet implements Runnable
{
    // variables
    private Thread th;
    private Player player;
    private Shot [] shots;
    private Player2 player2;
    private Shot2 [] shots2;

    // speed constants
    private final int shotSpeed = -2;
    private final int shot2Speed = -2;
    
    private final int playerLeftSpeed = -2;
    private final int playerRightSpeed = 2;
    private final int playerUpSpeed = -2;
    private final int playerDownSpeed = 2;
   
   //player2 speed
    private final int player2LeftSpeed = -2;
    private final int player2RightSpeed = 2;
    private final int player2UpSpeed = -2;
    private final int player2DownSpeed = 2;
   
    
    // move flags
    private boolean playerMoveLeft;
    private boolean playerMoveRight;
    private boolean playerMoveUp;
    private boolean playerMoveDown;
    
    //player 2 move
    private boolean player2MoveLeft;
    private boolean player2MoveRight;
    private boolean player2MoveUp;
    private boolean player2MoveDown;
    
    // double buffering
    private Image dbImage;
    private Graphics dbg;

    
 
    
    public void init()
    {
        setBackground (Color.white);
        player = new Player(200, 400);
        player2 = new Player2(200, 100);
        shots = new Shot[10];
        shots2 = new Shot2[10];
       
    }

    public void start ()
    {
        th = new Thread(this);
        th.start ();
    }

    public void stop()
    {
        th.stop();
    }

    public void destroy()
    {
        th.stop();
    }

    public void run ()
    {
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

        while (true)
        {
            // do operations on shots in shots array
            for(int i=0; i<shots.length; i++)
            {
                if(shots[i] != null)
                {
                    // move shot
                    shots[i].moveShot(shotSpeed);

                    
                    if(shots[i].getYPos() < 0)
                    {
                        
                        shots[i] = null;
                    }
                    
                    else if(shot2[i].cointains(int x_pos, int y_pos));
                    {
                        
                        Player[i] = null;
                    
                    
                
     //KOLLOISION  funktioniert hier NICHT!!! Fehlermeldung: .class expected

 
                }
            }
                       
            for(int i=0; i<shots2.length; i++)
            {
                if(shots2[i] != null)
                {
                    // move shot
                    shots2[i].moveShot2(shot2Speed);

                    // test if shot is out
                    if(shots2[i].getYPos() > 500)
                    {
                        // remove shot from array
                        shots2[i] = null;
                    }

                   
                    
                    //collision
                    
                    
                }
            }


            // move player
            if(playerMoveLeft)
            {
                player.moveX(playerLeftSpeed);
            }
            else if(playerMoveRight)
            {
                player.moveX(playerRightSpeed);
            }
            if(playerMoveUp)
            {
                player.moveY(playerUpSpeed);
            }
            else if(playerMoveDown)
            {
                player.moveY(playerDownSpeed);
            }
            // move player 2
                        if(player2MoveLeft)
            {
                player2.moveX(player2LeftSpeed);
            }
            else if(player2MoveRight)
            {
                player2.moveX(player2RightSpeed);
            }
            if(player2MoveUp)
            {
                player2.moveY(player2UpSpeed);
            }
            else if(player2MoveDown)
            {
                player2.moveY(player2DownSpeed);
            }
            
            // repaint applet
            repaint();

            try
            {
                Thread.sleep(10);
            }
            catch (InterruptedException ex)
            {
            }

            Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
        }
    }

    public boolean keyDown(Event e, int key)
    {
        if(key == Event.LEFT)
        {
            playerMoveLeft = true;
        }
        else if(key == Event.RIGHT)
        {
            playerMoveRight = true;
        }
        if(key == Event.UP)
        {
            playerMoveUp = true;
        }
        else if(key == Event.DOWN)
        {
            playerMoveDown = true;
        }
        
        
        //shot 
        else if(key == 32)
        {
            
            for(int i=0; i<shots.length; i++)
            {
                if(shots[i] == null)
                {
                    shots[i] = player.generateShot();
                 bumm.play();
                    break;
                }
            }
        }
        
        
        
        
        
        
        
        
        //player2
         if(key == 97)
        {
            player2MoveLeft = true;
        }
        else if(key == 100)
        {
            player2MoveRight = true;
        }
        if(key == 119)
        {
            player2MoveUp = true;
        }
        else if(key == 115)
        {
            player2MoveDown = true;
        }
        
        
        //shot2 
        else if(key == 118)
        {
            
            for(int i=0; i<shots2.length; i++)
            {
                if(shots2[i] == null)
                {
                    shots2[i] = player2.generateShot2();
                   
                    break;
                }
            }
        }

        return true;
    }
    
    

    public boolean keyUp(Event e, int key)
    {
        if(key == Event.LEFT)
        {
            playerMoveLeft = false;
        }
        else if(key == Event.RIGHT)
        {
            playerMoveRight = false;
        }
        if(key == Event.UP)
        {
            playerMoveUp = false;
        }
        else if(key == Event.DOWN)
        {
            playerMoveDown = false;

        }
        
        
//player2

        if(key == 97)
        {
            player2MoveLeft = false;
        }
        else if(key == 100)
        {
            player2MoveRight = false;
        }
        if(key == 119)
        {
            player2MoveUp = false;
        }
        else if(key == 115)
        {
            player2MoveDown = false;
        }

        return true;
    }


    public void update (Graphics g)
    {
        if (dbImage == null)
        {
            dbImage = createImage (this.getSize().width, this.getSize().height);
            dbg = dbImage.getGraphics ();
        }

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

        dbg.setColor (getForeground());
        paint (dbg);

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

    public void paint (Graphics g)
    {
        // draw player
        player.drawPlayer(g);
        //draw player2
        player2.drawPlayer(g);

        // draw shots
        for(int i=0; i<shots.length; i++)
        {
            if(shots[i] != null)
            {
                shots[i].drawShot(g);
            }
        }
         for(int i=0; i<shots2.length; i++)
        {
            if(shots2[i] != null)
            {
                shots2[i].drawShot2(g);
            }
        }
    }
}
?!?! warum funktioniert das hier jetzt nicht -.-'?
 

Marco13

Top Contributor
Marco13 hat gesagt.:
Keiner weiß, was DEINE Shots sind, und DEINE Player....


Zumindest ist das hier
Code:
                    else if(shot2[i].cointains(int x_pos, int y_pos));
                    {
                        Player[i] = null;
     //KOLLOISION  funktioniert hier NICHT!!! Fehlermeldung: .class expected
schon mal weit weg von gültigem Java-Code. Vom "funktionieren" mal garnicht zu reden.


Wenn "Shot" ein Point ist (oder eine Position hat, und man daraus einen Point erstellen kann), und wenn "Player" ein Polygon ist (oder man ein Polygon daraus erstellen kann) kann man aufrufen
Code:
if (playerPolygon.contains(shotPoint))
{
    // Kollision!
}
 

didjitalist

Bekanntes Mitglied
Marco13 hat gesagt.:
Bzgl "Umgekehrt": Wo-ho- vielleicht habe ich das Wort "Hüllkurve" etwas übereifrig als "Konvexe Hülle" überinterpretiert weil IMHO nicht klar ist, was mit der "Hüllkurve eines Polygons" gemeint sein soll - wenn du schlicht und einfach die Polygone selbst (bzw. die polygonalen Flächen) meintest, stimmt das natürlich...

hehe, ich hab natürlich extra von der 'hüllkurve' gesprochen. auch wenn nen sinnvoller kollisionsalgorithmus erstmal lieber auf die konvexe hülle gucken würde, ist diese üblicherweise beliebig komplex zu berechnen.
 
M

maddse

Gast
hei leute, hab jetzt shcon ne menge an dem game weitergeschreiben, habe aber trotzdem nochn kleines problem,


da die kommunikation im forum ja leider auf der strecke bleibt, gebe ich euch meine msn addy ( maddsn@hotmail.de)!
vll könnt mich einer adden, der mir helfen kann in BlueJ! (Java)

vielen vielen dank!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
B continuous collision detection ? Java Basics - Anfänger-Themen 5
T Hashmap Capacity und Collision Java Basics - Anfänger-Themen 8
felix92 MP3-Player ProgressBar Java Basics - Anfänger-Themen 29
C Musikstream mit Player aus Javazoom Java Basics - Anfänger-Themen 2
D mp3/wav Player programmieren Java Basics - Anfänger-Themen 3
B CD player Java Basics - Anfänger-Themen 8
G Pause-Funktion in einem mp3-Player Java Basics - Anfänger-Themen 2
H Playlist für JMF Player Java Basics - Anfänger-Themen 7
G Media Player: Failed to realize: com.sun.media.PlaybackEngine Java Basics - Anfänger-Themen 4
M Mp3 Player programmieren! Java Basics - Anfänger-Themen 1
G mini mp3 player Java Basics - Anfänger-Themen 4
J media.Player Java Basics - Anfänger-Themen 5
M Mp3 Player mit Singleton Java Basics - Anfänger-Themen 8
D Problem mit JMF-Player Java Basics - Anfänger-Themen 17
A frage zu mp3-player mit jmf Java Basics - Anfänger-Themen 18
L getDuration() von einem javax.media.player objekt problem. Java Basics - Anfänger-Themen 3
5 newBoxLayout undefined for Player? obwohl eingebunden. Java Basics - Anfänger-Themen 7
P Java Look & Feel - Windows Media Player 11 Java Basics - Anfänger-Themen 5
F Media Player integrieren Java Basics - Anfänger-Themen 4
E Threadproblem mit mp3 player Java Basics - Anfänger-Themen 4
L MP3-Player mit Java Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben