Vom Spaceshooter zum Autorennspiel - Problem^^
Übersicht

Nichts95Betreff: Vom Spaceshooter zum Autorennspiel - Problem^^ |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo, ich habe mir mal das Space-Tut (Teil 1) von Schattendieb durchgelesen und wollte mal anhand dieses Tutorials ein Autorennspiel zusammenbasteln. Doch irgendwie habe ich ein Problem: Blitz Basic schreibt mir "Illegal memory adress". Hier mal der Code:
Code: [AUSKLAPPEN] Graphics 800,600,16,1 SetBuffer BackBuffer TFormFilter 1 AutoMidHandle 1 SeedRnd MilliSecs() Dim sp_grafik(360) For gr=0 To 359 sp_grafik(gr) = LoadImage("grafiken\Auto.bmp") RotateImage sp_grafik(gr),gr Cls DrawBlock sp_grafik(gr),400,300 Flip Next Type player Field x#,y#,grad# Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung# End Type Global spieler.player=New player spieler\maxspeed#=9 spieler\beschleunigung#=0.06 spieler\wendigkeit#=2 Origin 400,300 While Not KeyHit(1) steuerung() spieler_versetzten() spieler_malen() Flip Wend End Function steuerung() If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit# If KeyDown(205)Then spieler\grad#=spieler\grad+spieler\wendigkeit# If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360 If spieler\grad#<0 Then spieler\grad#=360+spieler\grad# If KeyDown(200) Then If spieler\spx#<Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#+Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spx#>Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#-Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#<Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#+Abs(Sin(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#>Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#-Abs(Sin(spieler\grad#)*spieler\beschleunigung#) End If End Function Function spieler_versetzten() spieler\x#=spieler\x#+spieler\spx# spieler\y#=spieler\y#+spieler\spy# End Function Function spieler_malen() DrawImage sp_grafik(Int(spieler\grad#)),0,0 End Function Was hab ich falsch gemacht?^^ PS: Ich habe schon versucht eine E-mal zu schreiben (was irgendwie nicht klappte) und habe im Forum nach dem Thema des Tutorials gesucht! |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bist du sicher, das das Bild existiert ??
Zitat: sp_grafik(gr) = LoadImage("grafiken\Auto.bmp")
|
||
Twitter
Download Jewel Snake! Windows|Android |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja^^ Das einzige was mir jetzt eventuell noch in den Kopf kommen würde wäre das ich momentan ja noch die BB2D Demo noch verwende... Aber die unterstützt BMP ja doch! | ||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber vielleicht hast du das Bild nicht unter .bmp gespeichert! ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Doch, ist unter BMP gespeichert... | ||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. Bitte schalte mal den Debugger ein und schau was dann für ein Fehler gezeigt wird. Um zu testen ob das Bild geladen wurde kannst du die Bildvariable mit print ausgeben lassen - es sollte eine Zahl ungleich 0 da stehen. Wenn dies nicht der Fall ist wurde das Bild nicht geladen. EDIT: Debugger gibt bei mir ein Buffer does not exist aus - Du hast die Klammern hinter Backbuffer vergessen. Da das eine Funktion ist die was zurückgibt sind die Klammern zwingend verbindlich. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, danke, funktioniert alles ![]() |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Drum Merke: Der Debugger ist dein Freund. Lass ihn solang Du noch am Schrauben bist an. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So, jetzt habe ich ein neues Problem: Das Auto will nicht nach vorne fahren^^ Nur umdrehen kann es sich. Hier mein aktueller Quellcode der noch woanders geändert wurde:
Code: [AUSKLAPPEN] Graphics 800,600,16,1 SetBuffer BackBuffer() TFormFilter 1 AutoMidHandle 1 SeedRnd MilliSecs() test=LoadImage("grafiken\auto.bmp") ;hintergrund1=LoadImage("grafiken\boden.bmp") Dim sp_grafik(360) For gr=0 To 359 sp_grafik(gr)=LoadImage("grafiken\auto.bmp") RotateImage sp_grafik(gr),gr Cls ;TileBlock hintergrund1, 0, 0 DrawImage sp_grafik(gr),400,300 DrawImage test,299,359 Flip Next Type player Field x#,y#,grad# Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung# End Type Global spieler.player=New player spieler\maxspeed#=5 spieler\beschleunigung#=0.05 spieler\wendigkeit#=2 Origin 400,300 While Not KeyHit(1) steuerung() spieler_versetzten() spieler_malen() Flip Wend End Function steuerung() If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit# If KeyDown(205)Then spieler\grad#=spieler\grad+spieler\wendigkeit# If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360 If spieler\grad#<0 Then spieler\grad#=360+spieler\grad# If KeyDown(200) Then If spieler\spx#<Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#+Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spx#>Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#-Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#<Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#+Abs(Sin(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#>Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#-Abs(Sin(spieler\grad#)*spieler\beschleunigung#) End If End Function Function spieler_versetzten() spieler\x#=spieler\x#+spieler\spx# spieler\y#=spieler\y#+spieler\spy# End Function Function spieler_malen() DrawImage sp_grafik(Int(spieler\grad#)),0,0 End Function |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noch was anderes:
Zitat: If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360
Das If kannste weglassen, denn wenn spieler\grad# nicht grösser als 360 ist, dann kommt garantiert wieder das gleiche spieler\grad# raus. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Achso, jetzt verstehe ich^^ Der Hintergrund muss sich ja bewegen ![]() Aber trotzdem klappt das irgendwie nicht! (Code wurde natürlich geändert^^) Code: [AUSKLAPPEN] Graphics 800,600,16,1 SetBuffer BackBuffer() TFormFilter 1 AutoMidHandle 1 SeedRnd MilliSecs() ;hintergrund 1 x + y position hin1y# = 0 hin1x# = 0 ;---------- test=LoadImage("grafiken\auto.bmp") hintergrund1=LoadImage("grafiken\boden.bmp") Dim sp_grafik(360) For gr=0 To 359 sp_grafik(gr)=LoadImage("grafiken\auto.bmp") RotateImage sp_grafik(gr),gr Cls TileBlock hintergrund1, hin1y# , hin1x# DrawImage sp_grafik(gr),400,300 DrawImage test,299,359 Flip Next Type player Field x#,y#,grad# Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung# End Type Global spieler.player=New player spieler\maxspeed#=5 spieler\beschleunigung#=0.05 spieler\wendigkeit#=2 Origin 400,300 While Not KeyHit(1) steuerung() spieler_versetzten() spieler_malen() Flip Wend End Function steuerung() If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit# If KeyDown(205)Then spieler\grad#=spieler\grad+spieler\wendigkeit# If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360 If spieler\grad#<0 Then spieler\grad#=360+spieler\grad# If KeyDown(200) Then If spieler\spx#<Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#+Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spx#>Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#-Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#<Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#+Abs(Sin(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#>Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#-Abs(Sin(spieler\grad#)*spieler\beschleunigung#) End If If KeyDown(203)Then hin1x# = - spieler\beschleunigung# EndIf If KeyDown(205)Then hin1y# = + spieler\beschleunigung# EndIf If KeyDown(200)Then hin1y# = - spieler\beschleunigung# hin1x# = - spieler\beschleunigung# EndIf End Function Function spieler_versetzten() spieler\x#=spieler\x#+spieler\spx# spieler\y#=spieler\y#+spieler\spy# End Function Function spieler_malen() DrawImage sp_grafik(Int(spieler\grad#)),0,0 End Function |
||
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Da das Thema schon etwas weiter nach hinten gerutscht ist und warscheinlich keiner mir helfen kann habe ich es einfach nochmal anhand einen BB-Buches probiert^^ Doch wenn ich die Taste drücke, (Linke Pfeiltaste) die den Hintergrund verschieben soll, dann endet das Programm (wieder) mit einem "illegal memory adress"-Fehler^^ Hier der Code:
Code: [AUSKLAPPEN] Graphics 800,600,16,1 SetBuffer BackBuffer() TFormFilter 1 AutoMidHandle 1 SeedRnd MilliSecs() test=LoadImage("grafiken\auto.bmp") hintergrund1=LoadImage("grafiken\boden.bmp") Dim sp_grafik(360) For gr=0 To 359 sp_grafik(gr)=LoadImage("grafiken\auto.bmp") RotateImage sp_grafik(gr),gr Cls TileBlock hintergrund1, 0 , I DrawImage sp_grafik(gr),400,300 DrawImage test,299,359 Flip Next Type player Field x#,y#,grad# Field spx#,spy#,maxspeed#,wendigkeit#,beschleunigung# End Type Global spieler.player=New player spieler\maxspeed#=5 spieler\beschleunigung#=0.05 spieler\wendigkeit#=2 Origin 400,300 While Not KeyHit(1) steuerung() spieler_versetzten() spieler_malen() Flip Wend End Function steuerung() If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit# Repeat I = I+1 If I = 200 Then I=0 TileBlock hintergrund1 ,0,I Until KeyHit(1) EndIf If KeyDown(205)Then spieler\grad#=spieler\grad+spieler\wendigkeit# If spieler\grad#>=360 Then spieler\grad#=spieler\grad# Mod 360 If spieler\grad#<0 Then spieler\grad#=360+spieler\grad# If KeyDown(200) Then If spieler\spx#<Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#+Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spx#>Cos(spieler\grad#)*spieler\maxspeed# Then spieler\spx#=spieler\spx#-Abs(Cos(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#<Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#+Abs(Sin(spieler\grad#)*spieler\beschleunigung#) If spieler\spy#>Sin(spieler\grad#)*spieler\maxspeed# Then spieler\spy#=spieler\spy#-Abs(Sin(spieler\grad#)*spieler\beschleunigung#) End If If KeyDown(203)Then hin1x# = - spieler\beschleunigung# EndIf If KeyDown(205)Then hin1y# = + spieler\beschleunigung# EndIf If KeyDown(200)Then hin1y# = - spieler\beschleunigung# hin1x# = - spieler\beschleunigung# EndIf End Function Function spieler_versetzten() spieler\x#=spieler\x#+spieler\spx# spieler\y#=spieler\y#+spieler\spy# End Function Function spieler_malen() DrawImage sp_grafik(Int(spieler\grad#)),0,0 End Function |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: If KeyDown(203)Then
spieler\grad#=spieler\grad-spieler\wendigkeit# Du hast da immer das For spieler.spieler=each spieler vergessen ![]() Und du hast garkeinen Type mit dem Namen spieler, oder bin ich blind |
||
Twitter
Download Jewel Snake! Windows|Android |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: For spieler.spieler=each spieler If KeyDown(203)Then spieler\grad#=spieler\grad-spieler\wendigkeit# Meinst du das so? Oder so: Zitat: If KeyDown(203)Then For spieler.spieler=each spieler spieler\grad#=spieler\grad-spieler\wendigkeit# |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das untere Mein ich,... aber du musst noch den Type Spieler erstellen!
(und ein next nicht vergessen) Wenn dir das alles nichts sagt, dann musst du wohl mal in der OnlineHilfe nach Types suchen =) |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
Seoman |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach, herrlich, die Anglizismen^^ Entweder du willst Deutsch sprechen, oder Englisch. Type player erstellen und dann spieler abfragen geht nicht ![]() Also for spieler.player... Ist aber ja auch gemein, wenn Tankbuster das da so reinschreibt und man ihm vertraut und nicht so gerne selber nachdenkt ![]() Allerdings ist das wenn ich das richtig sehe nicht das Problem, weil du nur einen Typeeintrag hast und deshalb nicht die Schleifen durchgehen musst... Ist also nicht die Loesung, zugegebenermassen bin ich aber alles andere als gut im Debuggen^^ Was sagt dir also dein Debugger als genaue Nachricht und Fehlerzeile? |
||
In Australien...
Projekte sind zur Zeit wieder eingefroren und auf Designlevel zurueckgestuft... Generalueberholungen notwendig ![]() |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Debugger? Keine Ahnung wie dieses Ding funktioniert^^ Hab mal soein "View Log"-Dialog oder was das sein soll geöffnet und das Spiel neu gestartet aber half nichts - alles war schwarz. (Nicht mal ein Grafikfehler^^ - also das Dialogfenster war schwarz^^) Naja, wenn er mir die Meldung mit dem Illegal memory adress zeigt markiert er mir leider keine Zeile... Zum Debugger noch: Das könnte nicht daran liegen, das ich die Demo verwende und diese so eingeschränkt ist das ich den Debugger nicht verwenden kann?^^ | ||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
UUps!!
Sorry, aber ich hab anstatt Zitat: Global spieler.player=New player
folgendes gelesen Zitat: Global spieler.spieler=New spieler
dann würde da natürlich das Type spieler fehlen ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
Nichts95 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich glaube ich bin weiter gekommen^^ Ich habe jetzt geschafft das der Hintergrund sich bei Druck der "Obenpfeiltaste" sich der Hintergrund um 4 Pixel veschiebt. Doch das kann ich pro Programmstart nur einmal machen ![]() Hier die Function, die dafür zuständig ist... Code: [AUSKLAPPEN] Global yh# Global xh# Function hintergrund1() TileBlock hintergrund1, yh, xh If KeyDown (200) Then Repeat yh#= - 4 Until Not KeyDown (200) EndIf End Function |
||
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach doch einfach
Zitat: If KeyDown (200) Then yh#= yh- 4
|
||
Twitter
Download Jewel Snake! Windows|Android |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group