unauffindbarer fehler.... bitte brauche hilfe
Übersicht

![]() |
YankeeBetreff: unauffindbarer fehler.... bitte brauche hilfe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe hier mein erstes gescheides Spiel erstellt und da ist ein Fehler den ich nicht finde ![]() 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 : ![]() ![]() ![]() |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code ist zwar ne mittlere Katastrophe aber hauptsache du blickst durch. ![]() Code: [AUSKLAPPEN] Graphics 500, 500 muss Code: [AUSKLAPPEN] Graphics 500, 500,16,2
sein. |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok, daran hab ich nciht gedacht ![]() 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 |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Graphics 500,500 ist klar!
Aber ich denke mal das einige Variablen Global sein müssen, sonst gehts nicht! |
||
[BB2D | BB3D | BB+]
|
![]() |
Yankee |
![]() Antworten mit Zitat ![]() |
---|---|---|
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... ![]() |
||
ke^kx |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() Wenn Yankee mit 500,500 arbeiten will lass ihn doch. |
||
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON |
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bob hat Folgendes geschrieben: Du warst derjenige der gemeint hat den Fullscreenmodus bei dieser Auflösung setzen zu müssen. ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
sooo.....
ich ahb jetzt alles so gemacht wie ihr es mir gesagt habt ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ 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. ![]() @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: ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ähm.... also danke nochmal ich hoffe es funktioniert jetzt ![]() 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 ![]() ![]() Hoffe es funktioniert jetzt, aber wenns net funktioniert dann schreib ich einfach nochmal was und hoffe, dass ihr mir dann nochmal helft^^ ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group