Seite 1 von 1

FrontColor-Bug und Grafik bei Pong wird nicht angezeigt

Verfasst: 17.04.2008 21:33
von DasSchaf
Hi,

ich bin blutiger Anfänger was PB angeht un beiß mich gerade durch das Tutorial vom Handbuch.
Jetzt habe ich 2 Probleme:

1. Wenn ich

Code: Alles auswählen

FrontColor(255,255,255)
schreibe kommt "FrontColor(): Incorrect numbers of parameters." und es kommt erst keine Fehlermeldung wenn ich

Code: Alles auswählen

FrontColor(255+256*255+256*256*255)
schreibe (aus den Tut-Dateien geklaut) was für mich keinen Sinn gibt, da überall gesagt wird dass man RGB-Werte eingeben muss und die sind ja von 0-255.

2. Ich habe alle Anweisungen des Tuts befolgt und bin inzwischen bei dem Pong-Spiel angekommen. Wenn ich das aber starten will kommt gar nichts. Nicht einmal die Wände, der Ball und der Schläger, sondern einfach nur ein schwarzer Bildschirm. Kurz danach gehts wieder zu Windows.
Hier mal der Code:

Code: Alles auswählen

;INIT
InitSprite()
InitKeyboard()
OpenScreen(640,480,32,"Pong")

Global BallX.w
Global BallY.w
Global SchlaegerX.w
Global SchlaegerY.w
Global BewegX.w
Global BewegY.w

BallX = 319
BallY = 239
BewegX = -1
BewegY = -1
SchlaegerX = 639 - 10
SchlaegerY = 239 - (30 / 2)

Repeat

;GRAFIK
ClearScreen(255,255,255)

StartDrawing(ScreenOutput())
FrontColor(255,255,255)
Box(0,0,20,480)
Box(0,0,640,20)
Box(0,460,640,20)

Box(SchlaegerX,SchlaegerY,10,30)
Box(BallX-1,BallY-1,3,3)

StopDrawing()
FlipBuffers()

;BENUTZEREINGABEN
ExamineKeyboard()

If KeyboardPushed(200)
  SchlaegerY - 1
EndIf 

If KeyboardPushed(208)
  SchlaegerY + 1
EndIf

If SchlaegerY < 21
  SchlaegerY = 20
ElseIf SchlaegerY > 460 - 30
  SchlaegerY = 460 - 30
EndIf

;BALLBEWEGUNG
BallX + BewegX
BallY + BewegY

;Kollision
If BallX < 20
  BewegX = 1
EndIf

If BallY < 20
  BewegY = 1
EndIf

If BallY > 460
  Beweg = -1
EndIf

If BallX > SchlaegerX And BallX < SchlaegerX + 10 And BallY > SchlaegerY And BallY < SchlaegerY + 30
  BewegX = -1
EndIf
Until KeyboardPushed(1) Or BallX > 640
Ich habe keine Ahnung was da falsch ist, weil ich praktisch alles von dem Buch abgeschrieben habe. Die SuFu hat bei meiner ersten Frage 198 Ergebnisse ausgespuckt und alle haben nicht gepasst. Bei der zweiten gab es keinen Thread mit meinem Problem.

mfg

Verfasst: 17.04.2008 21:40
von STARGÅTE
also erst mal , benutzt du die Version 3.3 ?
sieht nämlich so aus.

zu 1.

Wenn du 3.3 hast ist FrontColor(R,G,B) richtig.
Hast du 4.0+ ist FrontColor(RGB(R,G,B)) richtig.

zu 2.
Bei mir ist alles weis
weil ja auch der Bildschirm weiß sein soll: ClearScreen(255,255,255)
und die hier:
Box(0,0,20,480)
Box(0,0,640,20)
Box(0,460,640,20)
Rechteecke zeichnest die den ganzen Bildschirm einnehmen und weiß machen

Das der Bildschirm aus geht liegt vllt bei dir daran das diese Abbruchbedingung erfüllt ist :
KeyboardPushed(1) Or BallX > 640


EDIT : dein Code geht wenn du einfach das ClearScreen(255,255,255) druch ClearScreen(0,0,0) ersetzt, dann ist der Ball und Wände sichtbar

Verfasst: 17.04.2008 21:50
von DasSchaf
Ich benutze die Version 4.1.
Danke für die Hilfe mit dem RGB, jetzt scheint es zu funktionieren.

ClearScreen hab ich jetzt geändert. Aber wenn ich das Programm jetzt starten will kommt trotzdem nur ein schwarzer Bildschirm.
Also die ESC-Taste hab ich nicht gedrückt alse muss BallX > 640 sein.
Kann es daran liegen das die Schleife keinen Delay hat, also praktisch "unendlich" mal in der Sekunde ausgeführt wird?

Edit: jap es lag daran. Mit dem Delay seh ich was ;)

Edit2:

Es gibt noch ein weiteres problem mit Pong-Spiel. Wenn der Ball an die untere Wand kommt prallt er nicht ab sondern verschwindet und kurz darauf beendet sich das Spiel.

Code: Alles auswählen

;INIT
InitSprite()
InitKeyboard()
OpenScreen(640,480,32,"Pong")

Global BallX.w
Global BallY.w
Global SchlaegerX.w
Global SchlaegerY.w
Global BewegX.w
Global BewegY.w

BallX = 319
BallY = 239
BewegX = -1
BewegY = -1
SchlaegerX = 639 - 10
SchlaegerY = 239 - (30 / 2)

Repeat

;GRAFIK
ClearScreen(RGB(0,0,0))

StartDrawing(ScreenOutput())
FrontColor(RGB(255,255,255))
Box(0,0,20,480)
Box(0,0,640,20)
Box(0,460,640,20)

Box(SchlaegerX,SchlaegerY,10,30)
Box(BallX-1,BallY-1,3,3)

StopDrawing()
FlipBuffers()

;BENUTZEREINGABEN
ExamineKeyboard()

If KeyboardPushed(200)
  SchlaegerY - 1
EndIf 

If KeyboardPushed(208)
  SchlaegerY + 1
EndIf

If SchlaegerY < 21
  SchlaegerY = 20
ElseIf SchlaegerY > 460 - 30
  SchlaegerY = 460 - 30
EndIf

;BALLBEWEGUNG
BallX + BewegX
BallY + BewegY

;Kollision
If BallX < 20
  BewegX = 1
EndIf

If BallY < 20
  BewegY = 1
EndIf

If BallY > 460
  Beweg = -1
EndIf

If BallX > SchlaegerX And BallX < SchlaegerX + 10 And BallY > SchlaegerY And BallY < SchlaegerY + 30
  BewegX = -1
EndIf
Delay(10)
Until KeyboardPushed(1) Or BallX > 640
Das Problem müsste ziemlich am Ende liegen:

Code: Alles auswählen

If BallY > 460
  Beweg = -1
EndIf
Dort wird abgefragt ob der Ball die Mauer berührt (sie ist 20 Pixel dick) und dann sollte die Richtung geändert werden.

Verfasst: 18.04.2008 18:11
von Franky

Code: Alles auswählen

Bewegy=-1
, nich

Code: Alles auswählen

Beweg=-1

Wenn du so Probleme öfters hast, würd ich dir zu EnableExplicit raten ;)

Hab ich in meinem "Neuen" Projekt jetzt auch mal eingeführt, ist zwar nervig, wenn man Fehlermeldungen für ne kleine Hilfsvariable bekommt, aber es erspart einiges an zeit, um eben solche Fehler zu finden ;)