Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „PingPong Game“

S

Saja1010

Guest

Hi Leute,

er zählt leider in der Grafik den Score nicht hoch. Woran kann es liegen?

Code:
package  {
    
    import flash.display.MovieClip;
    import flash.events.Event;
    
    
    public class Main extends MovieClip {
        
        
        public function Main() {
            
            // MY CODE
            // BALL
            var movBall:Ball = new Ball();
            
            var ballSpeedX:int = -3;    // geschwindigkeit des balles links/rechts
            var ballSpeedY:int = -2;    // geschwindigkeit des balles hoch/runter
            
            addChild(movBall);
            movBall.x = 400;
            movBall.y = 400;
            // PLAYER PADDLE
            var pPaddle:PlayerPaddle = new PlayerPaddle();
            
            addChild(pPaddle);
            pPaddle.x = 20;
            pPaddle.y = 288;
            init();
            // CPU PADDLE
            var ePaddle:CpuPaddle = new CpuPaddle();
            
            var ePaddleSpeed:int = 3;
            
            addChild(ePaddle);
            ePaddle.x = 1004;
            ePaddle.y = 288;
            // SCORE
            var pScore:int = 0;
            var eScore:int = 0;
            //SCORE TEXT
            
            var pScoreText:Playerscore = new Playerscore;
            var eScoreText:Cpuscore = new Cpuscore;
            
            addChild(pScoreText);
            pScoreText.x = 350;
            pScoreText.y = 25;
            
            addChild(eScoreText);
            eScoreText.x = 724;
            eScoreText.y = 25;
            
            //FUNCTIONS
            function init():void
            {
                stage.addEventListener(Event.ENTER_FRAME, loop);    // bei jedem frame wird dieses event ausgelöst und das gelooped
            }
            function loop(e:Event):void
            {
                pPaddle.y = mouseY;    // sorgt dafür das der pPaddle sich immer zu den y-koordinaten der maus ausrichtet
                
                movBall.x += ballSpeedX;    // bei jedem frame wird ballSpeedX zu der position des balles addiert
                movBall.y += ballSpeedY;    //                        ballSpeedY
                
            trace(eScore);
            trace(pScore);
            
                
                // BOUNCING BALL
                if (movBall.x <= movBall.width/2) {    // überprüft ob der ball auf der linken fensterseite auf einer x position ist die gleich oder weniger der hälfte des balles ist
                    movBall.x = movBall.width/2;    // wenn die bedingung erfüllt ist wird der ball auf die x position der hälfte des durchmessers des balles gesetzt (8)
                    ballSpeedX *= -1;                // lässt den ball abprallen
                    eScore ++;
                    uTF();
                } else if (movBall.x >= stage.stageWidth - movBall.width/2) {
                    movBall.x = stage.stageWidth - movBall.width/2;
                    ballSpeedX *= -1;
                    pScore ++;
                    uTF();
                }
                if (movBall.y <= movBall.height/2) {
                    movBall.y = movBall.height/2;
                    ballSpeedY *= -1;
                } else if (movBall.y >= stage.stageHeight - movBall.height/2) {
                    movBall.y = stage.stageHeight - movBall.height/2;
                    ballSpeedY *= -1;
                }
                
                
                // CONTROLLING PADDLE
                if (pPaddle.y - pPaddle.height/2 - 5 < 0) {    // sorgt dafür das der pPaddle nicht aus dem fenster geführt werden kann
                    pPaddle.y = pPaddle.height/2 + 5;
                }
                if (pPaddle.y + pPaddle.height/2 + 5 > stage.stageHeight) {
                    pPaddle.y = stage.stageHeight - pPaddle.height/2 - 5;
                }
                if (ePaddle.y - ePaddle.height/2 - 5 < 0) {    // sorgt dafür das der pPaddle ni5*cht aus dem fenster geführt werden kann
                    ePaddle.y = ePaddle.height/2 + 5;
                }
                if (ePaddle.y + ePaddle.height/2 + 5 > stage.stageHeight) {
                    ePaddle.y = stage.stageHeight - ePaddle.height/2 - 5;
                }
                
                
                // AI
                if (ePaddle.y < movBall.y - 10) {
                    ePaddle.y += ePaddleSpeed;
                } else if (ePaddle.y > movBall.y + 10) {
                    ePaddle.y -= ePaddleSpeed;
                }
                
                // COLLISIONS
                if (pPaddle.hitTestObject(movBall) == true) {
                    if (ballSpeedX < 0) {
                        ballSpeedX *= -1;
                        ballSpeedY = calculateBallAngle(pPaddle.y, movBall.y);
                    }
                } else if (ePaddle.hitTestObject(movBall) == true) {
                    if (ballSpeedX > 0) {
                        ballSpeedX *= -1;
                        ballSpeedY = calculateBallAngle(ePaddle.y, movBall.y);
                    }
                    
                    
                if (pScore >= 3) {
                    pPaddle.height = 70;
                    }
                if (pScore >= 5) {
                    pPaddle.height = 50;
                    }
                if (pScore >= 8) {
                    pPaddle.height = 30;
                    }
                    

                    
                    
                }
                
                // CALCULATION OF BALL ANGLE
                function calculateBallAngle(paddleY:Number, ballY:Number):Number
                {
                    var ySpeed:Number = 5 * ( (ballY - paddleY) / 25); // ballY - paddleY / 25 ergibt -1 und 1 je nachdem wo der ball aufschlägt
                    return ySpeed;        
                }
                //SCORE
                function uTF():void
                {
                    pScoreText.text = "test" + pScore;
                    eScoreText.text = "test" + eScore;
                }
                
            }

        }
    }
    
}
 

keul3

3dsMax | 3D-Contest

AW: PingPong Game

Du hast einige Variablen in der Construtor deklariert, auf welche du versuchst aus anderen Funktionen drauf zuzugreifen, wie z.B. eScore/pScore. Diese müssen global deklariert werden.

Auch würde ich dir empfehlen beim OOP die Zugriffsattribute wie private, public, protected usw. zu benutzen.
 

PENo1

Noch nicht viel geschrieben

AW: PingPong Game

Ein alter Grundsatz in der OOP ist :"global is evil!" ich würde Dir eher raten über entsprechende Getter- und Setter-Funktionen die Scorevariablen abzufragen und zu ändern. Programmierst Du hingegen globale Variablen erschwert sich Deine Fehlersuche enorm .

Gruß PENo1
 

keul3

3dsMax | 3D-Contest

AW: PingPong Game

Mit global meinte ich innerhalb der Main-Class, also private var .... wenn sie denn in mehr als einer function innerhalb dieser Klasse benötigt werden.
Eben bei genaueren schauen entdeckt, dass functions innerhalb einer function/constructor deklariert wurden. Solch eine Schachtelung ist natürlich murks.
 

PENo1

Noch nicht viel geschrieben

AW: PingPong Game

Gestehe, ich habe das Listing nur überflogen, prinzipiell geb ich Keule Recht, wobei eben global eigentlich was anderes bedeutet ... aber egal ^^

Du könntest das Ganze auch anders aufziehen, was zu einer besseren Kapselung führen würde, indem Du die Punktezählung in ein EIGENES Objekt packst, ein Scoreboard zum Beispiel. Ist ja für Tischtennis nichts ungewöhnliches, in die Methoden des Objektes kannst Du auch die Prüfroutinen implementieren, ob der Spieler einen bestimmten Punktestand erreicht hat, dann soll das Objekt "Scoreboard" die Getter-Funktion des Objekts "PlayerPaddle" aufrufen ist es zu groß lässt Du vom "Scoreboard" die Setter-Funktion für das Player-Paddle aufrufen und verkleinerst es .

Die Kapselung wäre stärker und das Ganze liesse sich in eigene Klasse auslagern, würde Deine Spiellogik evt. auch etwas übersichtlicher machen.

Gruß PENo1
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.158
Beiträge
2.581.868
Mitglieder
67.223
Neuestes Mitglied
Desiree
Oben