unauffindbarer fehler.... bitte brauche hilfe

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Yankee

Betreff: unauffindbarer fehler.... bitte brauche hilfe

BeitragSa, März 18, 2006 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe hier mein erstes gescheides Spiel erstellt und da ist ein Fehler den ich nicht finde Sad !!! bitte schaut das mal an und sagt mir ob ihr ein Fehler entdeckt habt

Code: [AUSKLAPPEN]

Graphics 500, 500

SetBuffer BackBuffer()

leftfighter=LoadImage("raumschifflinks.bmp")
rightfighter=LoadImage("raumschiffrechts.bmp")
linkerschuss=LoadImage("bulletleft.bmp")
rechterschuss=LoadImage("bulletright.bmp")
stars=LoadImage("stars.bmp")
punkte=LoadImage("score.bmp")

tot=LoadSound("boom.wav")
schuss=LoadSound("missile.wav")

x = 1

wegschieseny1 = leftfighter_y
wegschiesenx1 = leftfighter_x - 10

wegschieseny2 = rightfighter_y
wegschiesenx2 = rightfighter_x + 10

leftfighter_y = 250
leftfighter_x = 20

rightfighter_y = 250
rightfighter_x = 480

linkerschuss_y = leftfighter_y
linkerschuss_x = 40

rechterschuss_y = rightfighter_y
rechterschuss_x = 460

forstars_y = 0

score_x = 250
score_y = 480

punkteplayer1 = 0 punkteplayer1_y = score_y - 10 punkteplayer1_x = score_x - 20
punkteplayer2 = 0 punkteplayer2_y = score_y + 10 punkteplayer2_x = score_x + 20

While Not KeyDown (1)
   
      
      If x = 1 Then start
   
      If x = 1 Then x = x + 1
      
      If x = 2
      
         spielerlinks
         spielerrechts
         schiesen
         treffer
         hintergrund
         ende
      
      EndIf
   
   Cls
   Flip

Wend


Function neuanfang() ; die anfangsposition
   
   DrawImage leftfighter, leftfighter_x, leftfighter_y
   DrawImage rightfighter, rightfighter_x, rightfighter_y

End Function

Function start()
   
   punkteplayer1 = 0
   punkteplayer2 = 0
   neuanfang

End Function

Function spielerlinks()  ; bewegt den 1.ten(linken) spieler

   While Not KeyDown (1)
      If KeyDown (17) Then leftfighter_y=leftfighter_y + 4 ;nach oben
      If KeyDown (31) Then leftfighter_y=leftfighter_y - 4 ;nach unten

      If leftfighter_y=>500 Then leftfighter_y = 500 ;wenn man zu weit
      If leftfighter_y=<0 Then leftfighter_y = 0     ;nach unten oder
                                                     ;oben ist
      wegschiesenx1 = wegschiesenx1 - 3
   
   Wend                                               

End Function



Function spielerrechts() ; bewegt den 2.ten(rechten) spieler

   While Not KeyDown (1)
   
      If KeyDown (17) Then rightfighter_y=rightfighter_y + 4 ;nach oben
      If KeyDown (31) Then rightfighter_y=rightfighter_y - 4 ;nach unten

      If rightfighter_y=>500 Then rightfighter_y = 500 ;wenn man zu weit
      If rightfighter_y=<0 Then rightfighter_y = 0     ;nach unten oder
                                                  ;oben ist
      wegschiesenx2 = wegschiesenx2 + 3

   Wend   
End Function

Function schiesen()
   
   If KeyHit (2) Then DrawImage linkerschuss, wegschiesenx1 ,wegschieseny1  And wegschiesenx1 = 40
   
   If KeyHit (57) Then DrawImage rechterschuss, wegschiesenx2, wegschieseny2 And wegschiesenx2 = 460
   
End Function    


Function treffer()
   
   
   While Not KeyDown (1)
      
      ;der rechte spieler, wenn er getroffen wird
      If ImagesCollide(linkerschuss, linkerschuss_x, linkerschuss_y,0,rightfighter, rightfighter_x, rightfighter_y,0)
         punkteplayer1 = punkteplayer1 + 1
         PlaySound tot
      EndIf
      
      ;der linke spieler, wenn er getroffen wird
      If ImagesCollide(rechterschuss, rechterschuss_x, rechterschuss_y,0,leftfighter, leftfighter_x, leftfighter_y,0)
         punkteplayer2 = punkteplayer2 +1
         PlaySound tot
      EndIf
         
      Delay 1000
      neuanfang
   
   Wend
   
End Function

Function hintergrund () ; schöner hintergrund der sich bewegt
   
   While Not KeyDown(1)

      TileBlock stars,0,forstars_y
   
      TileImage stars,9,forstars_y*2
   
      TileImage stars,23,forstars_y*3
      
      forstars_y=forstars_y+1
      If forstars_y=ImageHeight(forstars) Then forstars_y=0
   
      Flip

   Wend
   
End Function


Function ende ()

   If punkteplayer1 > 10 Then Print "Spieler 1 hat gewonnen"
   
   If punkteplayer2 > 10 Then Print "Spieler 2 hat gewonnen"
   
   Delay 3000
   
   x = x - 1
   
   start
   
   
End Function


ist zwar etwas viel, aber was ich mir da gedacht habe ist schon cool finde ich : Very Happy Very Happy Very Happy So das wars

Chester

BeitragSa, März 18, 2006 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Code ist zwar ne mittlere Katastrophe aber hauptsache du blickst durch. Very Happy

Code: [AUSKLAPPEN]

Graphics 500, 500

muss Code: [AUSKLAPPEN]
Graphics 500, 500,16,2

sein.
 

ke^kx

BeitragSa, März 18, 2006 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Farbtiefe und der Modus sind eigentlich optional, das kanns also eigentlich ncith sein.

@Yankee:
Kannst du eventuell nochmal genauer das Problem schildern? Denn ich hab jetzt auch keine Lust mir irgendwelche Grafiken zu erstellen...

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Chester

BeitragSa, März 18, 2006 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Auflösung 500,500 wird im Vollbild von dem meisten Grafikkarten nicht unterstützt und verursacht einen "Unable to set Graphicsmode".

MfG
ChESTeR
 

ke^kx

BeitragSa, März 18, 2006 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, daran hab ich nciht gedacht Wink Sry...

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSa, März 18, 2006 17:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Graphics 500,500 ist klar!

Aber ich denke mal das einige Variablen Global sein müssen, sonst gehts nicht!
[BB2D | BB3D | BB+]

Yankee

BeitragSo, März 19, 2006 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut ich probier das dann mal aus mit:
[syntax="bb"]Graphics 640, 480,16,2[/syntax]
Aber glaubt ihr das Spiel funktioniert dann auch bei der Demo Version?
Weil ich hab nur die Demo... Sad und find BlitzBasic 2d oder 3d niergens.
 

ke^kx

BeitragSo, März 19, 2006 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, es wird mit der Demo funktionieren, aber du kannst trotzdem keine exe draus machen. Kaufen kannst du B3D auf www.blitzbasic.com

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Bob

BeitragSo, März 19, 2006 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

sag doch mal bitte was genau das Problem ist.
Beim groben durchfliegen des Codes ist mir afgefallen das du über Variable X Das Spiel starten und anhalten willst.
X = ist aber nicht Global.
Somit greift die Funktion Ende() auf die Locale Variabl "X = X - 1" inherhalb der Functin zurück.
Nimm Aussagekräftige Varaibalen.
Deklariere wichtige Variablen Global oder übergebe Sie an eine Function.

@Chester
Zitat:
Die Auflösung 500,500 wird im Vollbild von dem meisten Grafikkarten nicht unterstützt und verursacht einen "Unable to set Graphicsmode".


Du warst derjenige der gemeint hat den Fullscreenmodus bei dieser Auflösung setzen zu müssen. Wink

Wenn Yankee mit 500,500 arbeiten will lass ihn doch.
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON

Chester

BeitragSo, März 19, 2006 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Bob hat Folgendes geschrieben:

Du warst derjenige der gemeint hat den Fullscreenmodus bei dieser Auflösung setzen zu müssen. Wink

Wenn Yankee mit 500,500 arbeiten will lass ihn doch.


Wann habe ich gesagt, dass er den FullScreen setzen muss? Im Gegenteil, er darf ihn gar nicht setzen, weil die Auflösung 500x500 im FullScreenmodus höchstwahrscheinlich nicht von seiner Grafikkarte unterstütz wird. Deshalb muss der optionale Modus Parameter > 1 sein (Standart = 1) . Deshalb:
Code: [AUSKLAPPEN]

Graphics 500,500,16,2
;oder
Graphics 640,480  ; diese Auflösung wird von jeder GraKa unterstützt 

Yankee

BeitragSo, März 19, 2006 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
sooo.....
ich ahb jetzt alles so gemacht wie ihr es mir gesagt habt Laughing
aber äh jetzt kommt noch ein problem....
bei der zeile in der hauptschleife

[syntax="bb"]
While Not KeyDown (1)


If x = 1 Then start

If x = 1 Then x = x + 1

If x = 2

spielerlinks
spielerrechts
schiesen
treffer
hintergrund
ende

EndIf
DrawImage rechterschuss ,rechterschuss_x, rechterschuss_y
DrawImage linkerschuss ,linkerschuss_x, linkerschuss_y

Cls
Flip

Wend
[/syntax]
da kommt jetzt immer der Fehler "Image does not exist" .......
Bitte nochmal hilfe^^
 

ke^kx

BeitragSo, März 19, 2006 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Tja, dann stimmt irgendwass mit linker- oder rechterschuss nicht... Entweder du lädst sie nicht richtig oder du überschreibst die Variable ausversehen einmal, z.B. weil du das _x oder _y weggelassen hast.

Jiriki
http://i3u8.blogspot.com
Asus Striker II
Intel Core2Quad Q9300 @ 2,5 GHz (aber nur zwei Kerne aktiv aufgrund der Instabilität -.-)
Geforce 9800 GTX
2GB RAM

Bob

BeitragMo, März 20, 2006 10:10
Antworten mit Zitat
Benutzer-Profile anzeigen
@ ChEsTeR

Stimmt.
Habs mir nochmal komplett durchgelesen und du hast recht.
Du hast eben nicht auf Fullscreen sondern Window mode geschaltet.

Sorry ChEsTeR, habe gepennt.
Embarassed


@Yankee

Mich wundert das du überhuapt etwas siehst.
Zuerst zeichnest du alle Grafiken ein.
Dann kommt:
Cls
Flip

Du löschtst also wieder alles im Backbuffer und zeichnest dann einen leeren Screen?
CLS gehört entweder hinter Flip oder Direkt am Anfang der Hauptschleife.

Du fragst immer wieder in den Funktionen
while not Keydown(1) ... Wend
ab.
Das ist unnötig da es nichts bring.
Eine Tastaturanschlag kann pro Schleifendurchgang nur einmal erfolgreich ausgewertet werden.

Ähhh was hast du überhaupt vor?
Ist dies ein Rundenbasiertes Spiel wo die Spieler nacheinander agieren?
Oder soll es Echtzeit sein?
Du würdest, wen du im Mainloop nicht schon If Keyhit(1) verwenden würdest permanent in der Funktion Spielerlinks festsitzen.
Ausserdem verwenden beide Spieler die selben Tasten?

In den Funktionen werden mittels DrawImage die Grafiken eingezeichnet.
Das ist Ok so aber sind die den die Variablen der Grafiken mittlerweile auch Global?
Zeig nochmal den ganzen Code.
Markiere die Zeile die nicht funktioniert.

Du rufst zuerst die Funktionen auf um die Raumschiffe zu zeichnen.
Fast als letztes rufst du den Hintergrund mit den Star's auf.
Dein Hintergrund übermalt die Raumschiffe.
Stell dir einfach vor du machst nen Zeichntrickfilm und malst auf Folien die Übereinander liegen. Male von "hinten" nach "vorne".
Die Funktion Hintergrund muss vor Spielerlinks.

Lass das zusätzliche Flip in der Funktion hintergrund weg.

Viel Glück

[EDIT]

Noch ein dicker Hund: Wink
Die Funktion Treffer führt dazu das dein Spiel permanent auf Neuanfang gesetzt wird. Delay und Neuanfang gehören mit in die If Abfrage ob ein Spieler getroffen wurde.
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON

Yankee

BeitragMo, März 20, 2006 16:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Ähm.... also danke nochmal ich hoffe es funktioniert jetzt Laughing
Und mit dem das man mit einem die beiden steuern soll.....
Das war ein Fehler weil ich hab das eine geschrieben und das andere
einfach rüberkopiert Wink damit es net so viel arbeit ist... Very Happy
Hoffe es funktioniert jetzt, aber wenns net funktioniert dann schreib ich einfach nochmal was und hoffe, dass ihr mir dann nochmal helft^^ Twisted Evil

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group