Finde den Bug nicht... :/
Übersicht

![]() |
SephkaBetreff: Finde den Bug nicht... :/ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe in meinem Code neuerdings eingebaut das die Map gesrcollt wird.Dadurch wird dei Map nicht richtig gezecihnet oder ich hab nen andren Fehler gemacht,da ich erst neu Angefangen hab mit BMAX erbitte ich eure Hilfe ![]() CODE: Code: [AUSKLAPPEN] '2D World
Graphics 1024,768 SeedRnd MilliSecs() 'ARRAY Global WH:Int=100 , WW:Int=100 Global World:Int[WH,WW] For a=0 To WH For b=0 To WW World[a,b]=Rand(0,1) Next Next 'SPIELER VARS Global PX:Int=90,PY:Int=90 Global PPY:Int=90,PPX:Int=90 Global SX:Int,Sy:Int Global Range=20 Global Move:Int=0 'MAUS VARS Global MX:Int,MY:Int 'FPS VARS Global time#,oldtime#,FPS# '############################################## If World[PX/30+SX,PY/30+SY]=1 Then World[PX/30+SX,PY/30+SY]=0 'LOOP While Not KeyHit(Key_L) DrawText FPS,1,1 'STEUERUNG If KeyHit(Key_W) And Move=0 Then Move=1;PPY=PY-30;PPX=PX If KeyHit(Key_S) And Move=0 Then Move=2;PPY=PY+30;PPX=PX If KeyHit(Key_A) And Move=0 Then Move=3;PPX=PX-30;PPY=PY If KeyHit(Key_D) And Move=0 Then Move=4;PPX=PX+30;PPY=PY If World[PPX/30+SX,PPY/30+SY]=1 Then Move=0;DebugLog "WAND" 'MAUS MX=Int(MouseX()/30*30) MY=Int(MouseY()/30*30) If MouseDown(2) Then World(MX/30+SX,MY/30+SY)=0 If MouseDown(1) Then World(MX/30+SX,MY/30+SY)=1 'RäNDER SIND NICHT BEGEHBAR: 'If PX<30 Then PX=30;Move=0 'If PX>WH*10-30 Then PX=WW*10-30;Move=0 'If PY<30 Then PY=30;Move=0 'If PY>WW*10-30 Then PY=WW*10-30;Move=0 'SCROOlVARIABLEN AKTUALISIEREN 'FLÜSSIGES LAUFEN If Move=1 Then PY:-3 If PY=PPY Then Move=0;SY:-1 End If If Move=2 Then PY:+3 If PY=PPY Then Move=0;SY:+1 End If If Move=3 Then PX:-3 If PX=PPX Then Move=0;SX:-1 End If If Move=4 Then PX:+3 If PX=PPX Then Move=0;SX:+1 End If '######################### 'ZEICHNEN DrawWorld() SetColor 255,20,40;DrawRect PX-SX*30,PY-SY*30,30,30;SetColor 255,255,255'PLAYER DrawRect MX,MY,30,30 Flip Cls 'FPS time# = MilliSecs() If time# - oldtime# <> 0 Then FPS# = Int(1000 / (time# - oldtime#)) If FPS# = 0 Then FPS# = 1 oldtime# = MilliSecs() '######################### Wend Function DrawWorld() Local Draw=True For a=Int(PX/30)-Range To Int(PX/30)+Range For b=Int(PY/30)-Range To Int(PY/30)+Range Select world[a+SX,b+SY] Case 0 Draw=False Case 1 SetColor 255,255,2 Draw=True End Select If Draw = True DrawRect a*30,b*30,30,30'Zeichnen wenn Block existiert Next Next End Function |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also grob drübergeuckt hast du 2 Fehler gemacht (Denklfehler)
1. : Arrays die du z.Bl. auf 100 Einheiten erstellst, können nur mit dem Index von 0-99 aufgerufen werden, also : Code: [AUSKLAPPEN] Local array:int[100]
For Local i:int = 0 to 99 array[ i ] = i*2 Next Wenn du von 0 bis 100 machst würde es ja heißen das du 101 elemente Hast und nicht wie von dir angegeben 100. 2. : Du möchtest nur den ausschnitt der Tilemap zeichnen den man auch sieht. Das für sich genommen ist schonmal ein guter ansatz, aber falsch umgesetzt (meiner meinung nach). Entweder du musst die Playerposition und die daraus resoltierenden X/Y/W/H Koordinaten des Spielfeldes errechnen (dann aber in einzellschritten und nicht in dert For/Next schleife), bietet dir aber nicht viel Spielraum, besser wäre es, mit der For/Next schleife alle Felder durchzugehen und anhand der Scroll koordinaten (Scroll und Spieler Koordinaten würde ich AUF JEDEN FALL GETRENNT behandeln ! ) kannst du mit ein paar If Abfragen noch schnell prüfen ob das Tile zu sehen ist, wenn ja, malen. mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Warum sollte er alle Felder durchgehen wenn er berechnen kann von wo bis wo er einzeichnen muss? Das ist doch blanke Verschwendung von Rechenzeit. | ||
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 |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Klappt trotzdem nicht (hab 1.Fehler behoben) | ||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
grafe |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Sephka
du solltest bei einem Array nicht in den Negativ bereich kommen folgende Zeilen: BlitzMax: [AUSKLAPPEN] For a=Int(PX/30)-Range To Int(PX/30)+Range wie du wahrscheinlich merkst prüft er hier world[-17,-17] darum noch schnell eine abfrage rein die eigentlich selbsterklärend ist: BlitzMax: [AUSKLAPPEN] Function DrawWorld() mfg grafe |
||
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geht immer noch nicht ![]() |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Fehlermeldung? Code?
Wie oft muss man es sagen: Ohne Infos sind wir hier auch machtlos. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sephka, überprüfe am Besten auch die gegebenen Verbesserungen! (-> Traue niemandem! ![]() Dann fällt nämlich auf, dass die Kontrollzeile so aussehen muss: BlitzMax: [AUSKLAPPEN] If a+SX=>0 And b+SY=>0 And a+SX<WH And b+SY<WW mfG mpmxyz |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hier der Code....
Geht leider immer noch nicht ![]() Code: [AUSKLAPPEN] '2D World
Graphics 1024,768 SeedRnd MilliSecs() 'ARRAY Global WH:Int=100 , WW:Int=100 Global World:Int[WH,WW] For a=0 To WH-1 For b=0 To WW-1 World[a,b]=Rand(0,1) Next Next 'SPIELER VARS Global PX:Int=90,PY:Int=90 Global PPY:Int=90,PPX:Int=90 Global SX:Int,Sy:Int Global Range=20 Global Move:Int=0 'MAUS VARS Global MX:Int,MY:Int 'FPS VARS Global time#,oldtime#,FPS# '############################################## If World[PX/30+SX,PY/30+SY]=1 Then World[PX/30+SX,PY/30+SY]=0 'LOOP While Not KeyHit(Key_L) DrawText FPS,1,1 'STEUERUNG If KeyHit(Key_W) And Move=0 Then Move=1;PPY=PY-30;PPX=PX If KeyHit(Key_S) And Move=0 Then Move=2;PPY=PY+30;PPX=PX If KeyHit(Key_A) And Move=0 Then Move=3;PPX=PX-30;PPY=PY If KeyHit(Key_D) And Move=0 Then Move=4;PPX=PX+30;PPY=PY If World[PPX/30+SX,PPY/30+SY]=1 Then Move=0;DebugLog "WAND" 'MAUS MX=Int(MouseX()/30*30) MY=Int(MouseY()/30*30) If MouseDown(2) Then World(MX/30+SX,MY/30+SY)=0 If MouseDown(1) Then World(MX/30+SX,MY/30+SY)=1 'RäNDER SIND NICHT BEGEHBAR: 'If PX<30 Then PX=30;Move=0 'If PX>WH*10-30 Then PX=WW*10-30;Move=0 'If PY<30 Then PY=30;Move=0 'If PY>WW*10-30 Then PY=WW*10-30;Move=0 'SCROOlVARIABLEN AKTUALISIEREN 'FLÜSSIGES LAUFEN If Move=1 Then PY:-3 If PY=PPY Then Move=0;SY:-1 End If If Move=2 Then PY:+3 If PY=PPY Then Move=0;SY:+1 End If If Move=3 Then PX:-3 If PX=PPX Then Move=0;SX:-1 End If If Move=4 Then PX:+3 If PX=PPX Then Move=0;SX:+1 End If '######################### 'ZEICHNEN DrawWorld() SetColor 255,20,40;DrawRect PX-SX*30,PY-SY*30,30,30;SetColor 255,255,255'PLAYER DrawRect MX,MY,30,30 Flip Cls 'FPS time# = MilliSecs() If time# - oldtime# <> 0 Then FPS# = Int(1000 / (time# - oldtime#)) If FPS# = 0 Then FPS# = 1 oldtime# = MilliSecs() '######################### Wend Function DrawWorld() Local Draw=True For a=Int(PX/30)-Range To Int(PX/30)+Range For b=Int(PY/30)-Range To Int(PY/30)+Range If a+SX=>0 And b+SY=>0 And a+SX<WH And b+SY<WW'<<----------------------Abfrage das man nicht unter null oder über's Maximum gerät! Select world[a+SX,b+SY] Case 0 Draw=False Case 1 SetColor 255,255,2 Draw=True End Select If Draw = True DrawRect a*30,b*30,30,30'Zeichnen wenn Block existiert EndIf Next Next End Function |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
![]() |
amon |
![]() Antworten mit Zitat ![]() |
---|---|---|
[x] Du willst SuperStrict verwenden um von der besseren Fehlerüberprüfung zu profitieren ![]() [x] Du willst uns mitteilen warum Du die Mauskoordinaten zuerst durch 30 dividierst um gleich wieder mit 30 zu multiplizieren [ ] Du kennst den Unterschied zwischen einem Funktionsaufruf und den dem Verändern eines Wertes in einem Array (Funktionsaufruf mit Parametern x,y - World(x, y) <--> Element an Pos x,y setzen World[x,y] = 0 Ich glaub zwar noch immer nicht, dass dann das Programm das macht was du willst, aber nachdem die ganzen Fehler bezüglich Datentypen usw. raus sind, kannst du auch besser den eigentlichen Fehler suchen ![]() |
||
![]() |
Sephka |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Kommt ein Error("Compile Error Expression of type 'Int Array' cannot be invoked") bei
Code: [AUSKLAPPEN] If MouseDown(2) Then World(MX/30+SX,MY/30+SY)=0 If MouseDown(1) Then World(MX/30+SX,MY/30+SY)=1 2.Fällt mir nicht mehr ein... 3.Wo hab ich das Falsch gemacht.....Ich weiß den Unterschied ![]() |
||
Mein Freund und Helfer:
Win7 Home Premium SP1 AMD Athlon II X4 645 3.1GHZ 8GB Ram 64bit |
undefined |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Error("Compile Error Expression of type 'Int Array' cannot be invoked")
Falsche Klammern "()" bei "World" --> müssen "[]" sein. Die Fehlermeldung sagt Dir, dass Du versuchst, dass Int-Array "World" als Funktion aufzurufen. ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group