Steinfall Bug
Übersicht

Gehe zu Seite Zurück 1, 2, 3 Weiter
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
so meine ich das auch warum schlage ich mir hier den so schwer rum wen es auch einfach geht ![]() |
||
![]() |
Belion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, ich hätte nicht ggedacht dass man es auch auf diesem einfachen wege lösen könnte.
Danke Psy. |
||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es geht :DDDDDD fast -.-!.Also die Steine fallen jetzt wen unter ihnen Luft ist.Aber sie fallen nur 1 Schritt runter :/ ? ich kann mir nicht vorstellen was falsch gemacht zu haben.Könnte mir da jemand fix auf die Sprünge Helfen?.
Code: [AUSKLAPPEN] Laden = True Type Steintyp Field X Field Y End Type Global Stein.Steintyp If Laden = True Laden = False For Y = 0 To 25 For X = 0 To 25 If map(X,Y) = 3 Stein.Steintyp = New Steintyp Stein\X = X Stein\Y = Y End If Next Next End If For Stein.Steintyp = Each Steintyp If map(Stein\X,Stein\Y+1) = 1 ;ist unter dem stein 1 dan fall runter SteinX map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 End If Next |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gern ![]() Löschst Du die ganzen Steintypen bei jedem Durchlauf auch wieder? Weil Du ja bei der For Stein.Steintyp = Each Steintyp Schleife stein\x und stein\y nicht modifizierst... Du kannst das Ganze auch anders machen. Nach jedem kompletten Scrollvorgang (oder vor jedem, wie mans halt sieht)(also wenn das Spiel 1 Teil komplett gescrollt hat) wird ja logischerweise die Routine aufgerufen, die den gesamten Level auf alles mögliche überprüft. Die könnte dann (GANZ GROB) so aussehn: (das dimfeld moving wird halt über den level gelegt, darin wird gespeichert in welche richtung das tile sich gerade bewegt). Code: [AUSKLAPPEN] Function checklevel()
For x= 1 To levelbreite For y=1 To leveltiefe If level(x,y)=stein If level(x,y+1)=leer Then moving(x,y)=runter EndIf If level(x,y)=player If level(x,y+1)=gegner Or level(x,y-1)=gegner Or level(x+1,y)=gegner Or level(x-1,y)=gegner Then TOT If level(x,y-1)=stein And moving(x,y-1)=runter Then TOT EndIf If level(x,y)=.... .... .... EndIf Next Next End Function L8er, PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jetzt ist alles so als hätte ich keinen type obwohl ich ein type habe für meine Steine ![]() Der Stein fällt wen er in der Luft ist, das ist auch ok so soll es ja sein. Stehe ich unter dem Stein, bleibt der Stein stehen so sollte es ja sein. Aber stehe ich unter einem Stein fällt gar kein stein mehr. Auch nicht wen Luft unter ihm ist. Gehe ich unter dem Stein weg. Fallen Alle steine plötzlich Runter. Code: [AUSKLAPPEN] Type Steintyp
Field X Field Y End Type Global Stein.Steintyp If Stein_Refresh = True Stein_Refresh = False For X=0 To 25 For Y=0 To 25 If map(X,Y) = 3 Stein.Steintyp = New Steintyp Stein\X = X Stein\Y = Y End If Next Next End If For Stein.Steintyp = Each Steintyp If map(SpielerX,SpielerY-1) Else If map(Stein\X,Stein\Y+1) = 1 map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 End If End If Delete Stein Stein_Refresh = True Next Werde mich jetzt schlafen Legen die 5 Stunden Fehler suche haben zwar nix gebracht aber was soll man machen.Später weiter suchen :/ |
||
- Zuletzt bearbeitet von Raiden93 am Mi, Dez 01, 2010 4:14, insgesamt 2-mal bearbeitet
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kein Thema ![]() An was bastelst Du da eigentlich genau? Oder in welche Richtung solls gehn? Gibts iwelche Screenshots? L8er, PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es ist so eine art Retro Game, habe leider den Namen von dem Spiel vergessen.
Es geht darum sich durch die Erde zu graben und Kristalle zu sammeln. Grabt man einen stein frei und steht nicht drunter, fällt der Stein so lange bis er den nächsten Boden berührt. ![]() |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, cool Du meinst Boulder Dash oder Emerald Mine ![]() Eins meiner Favoriten ![]() Dann hau mal rein! L8er, PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja wen es nur so einfach währe ^^ ich kauf mir ne Flasche Sekt wen der Bug beben ist, und stoße drauf an...... ![]() EDIT: Also den Fehler habe ich jetzt mit Rect Stein\X*32,Stein\Y*32,32,32,0 sichtbar gemacht. Es liegt daran das die Stein\X und Stein\Y werte nicht mit scrollen. Leider aber kenne ich mich nicht so mit dem Scrolling aus :/. Vielleicht hat jemand von euch ne Idee. Der Code: Code: [AUSKLAPPEN] Function Steinfallen_Function()
If Stein_Refresh = True Stein_Refresh = False For X=0 To 25 For Y=0 To 25 If map(X,Y) = 3 Stein.Steintyp = New Steintyp Stein\X = X Stein\Y = Y End If Next Next End If For Stein.Steintyp = Each Steintyp Rect Stein\X*32,Stein\Y*32,32,32,0 If map(SpielerX,SpielerY-1) Else If map(Stein\X,Stein\Y+1) = 1 map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 End If End If Next End Function ;Steuerung Taste: Pfeil Runter If KeyDown(208) Then If (map(SpielerX,SpielerY+1) = 0) Or (map(SpielerX,SpielerY+1) = 1) Or (map(SpielerX,SpielerY+1) = 2) If aa < 1 Move = 1 aa = 1 End If End If End If If Move = 1 Then ;So sieht mein Scrolling aus. If aa > 0 ScrollY = ScrollY + 2 SpielerY_Draw = SpielerY_Draw + 2 xo = xo + 1 If xo = 16 aa = 0 SpielerY = SpielerY + 1 xo = 0 End If End If End If |
||
![]() |
Belion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau, ist eine Art Boulderdash Clone die wir machen ^^.
Nur hängen wir leider an diesem ollen bug fest. |
||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja Belion nur das komische ist,Jetzt habe ich das mit dem Scrollen zwar aber ein stein denkt immer noch für alle 0o? also als hätte ich gar kein Type stein.....
Es fallen wieder erst die steine wen der Spieler unter gar keinem Stein steht..... :/ Code: [AUSKLAPPEN] Type Steintyp
Field X Field Y Field X_Draw Field Y_Draw End Type Global Stein.Steintyp Function Steinfallen_Function() If Stein_Refresh = True Stein_Refresh = False For X=0 To 25 For Y=0 To 25 If map(X,Y) = 3 Stein.Steintyp = New Steintyp Stein\X = X Stein\Y = Y End If Next Next End If For Stein.Steintyp = Each Steintyp Rect Stein\X*32+Stein\X_Draw,Stein\Y*32+Stein\Y_Draw,32,32,0 If map(Stein\X,Stein\Y+1) = 1 If map(SpielerX,SpielerY-1) = 3 Else map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 Stein\Y = Stein\Y +1 test = test +1 End If End If Next End Function ;Taste: Pfeil Runter ;SO HABE ICH ES AUCH MIT LINKS RECHTS...... gemacht If KeyDown(208) Then If (map(SpielerX,SpielerY+1) = 0) Or (map(SpielerX,SpielerY+1) = 1) Or (map(SpielerX,SpielerY+1) = 2) If aa < 1 Move = 1 aa = 1 End If End If End If If Move = 1 Then If aa > 0 ScrollY = ScrollY + 2 SpielerY_Draw = SpielerY_Draw + 2 For Stein.Steintyp = Each Steintyp Stein\Y_Draw = Stein\Y_Draw -2 Next xo = xo + 1 If xo = 16 aa = 0 SpielerY = SpielerY + 1 xo = 0 End If End If End If EDIT:!!!!!! GELÖST Code: [AUSKLAPPEN] For Stein.Steintyp = Each Steintyp
Rect Stein\X*32+Stein\X_Draw,Stein\Y*32+Stein\Y_Draw,32,32,0 If Stein\X = SpielerX Else If map(Stein\X,Stein\Y+1) = 1 map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 Stein\Y = Stein\Y +1 End If End If Next If Stein\X = SpielerX und nicht map(SpielerX,SpielerY) |
||
![]() |
Dottakopf |
![]() Antworten mit Zitat ![]() |
---|---|---|
@PSY
Zitat: also erstmal hacke ich direkt auf der Tilemap rum bei meinem Boulder Dash Clone. Das ist sogar sehr sauber und auch viel unkomplizierter. In der Tilemap steht ja eben drin um was fuer ein Tile es sich handelt. Warum sollte ich da noch n Array drueberlegen? Macht das ganze nur unuebersichtlicher und unnoetig kompliziert. Gerade eben weil die Tilemap nur das Tile zurückliefert das da gerade ist. Wenn du mal lustigere sachen machen willst, dann kann das ein problem werden. Evt. will ich meinen Arry zur laufzeit manipulieren ohne das sich die Tilemap ändert.... das geht nur wenn du einen zweiten layer drüber hast in dem du deine manipulationen zwischenspeichern kannst. Ein Beispiel: Per Knopfdruck soll eine eigentlich nicht begehbarer bereich plötzlich begehbar werden... Unsichtbare Energiefelder ...was weis ich. Zudem bin ich nicht an den index aus dem tile set, welcher meine Tile Map befüllt, gebunden. Das heißt ich kann jeder zeit mein Tile Set neu anordnen ohne das sich im code irgendwas ändert... Was bei großen Projekten sicher ein segen ist... Schön das alles klappt! ~Edit~ Achja.. wenn ihr als Team an einem Projekt arbeitet, sprecht euch vorher ab und einer stellt die Anfragen ans Forum. Gruß Dottakopf |
||
Rechtschreibfehler gelten der allgemeinen Belustigung! |
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Ein Beispiel:
Per Knopfdruck soll eine eigentlich nicht begehbarer bereich plötzlich begehbar werden... Unsichtbare Energiefelder ...was weis ich. Hm da haben wir irgendwie aneinander vorbeigeredet ![]() Bei meinen Code wär das gar kein Problem: Code: [AUSKLAPPEN] wir nehmen mal an, level(16,23) wäre eine verschlossene tuer. die soll nun geoeffnet sein If KeyHit(space) level(16,23)=opendoor ... ... EndIf So einfach würde das gehn. Wobei der Code auf einen BoulderDash Clone abgestimmt ist und nicht auf irgendeine Mischung diverser Games... L8er, PSY (edit) nen zweiten layer hab ich schon drüber, der heisst moving(x,y). Darin wird halt gespeichert, ob sich das jeweilige Tile bewegt und wenn, in welche Richtung. Aber selbst für komplexere Sachen (z.b. wenn die Blubbermasse durch den Level wächst usw.) reicht der Standardlayer level(x,y) den ich manipuliere völlig aus. |
||
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
So jetzt möchte ich das mein Stein jede Sekunde um 1 Fällt,leider kann ich mir nicht vorstellen wie ich es verwirkliche.Und ein danke an PSY und DottaKopf.
Ich Kritzel euch mal hier ein Stück meines Codes rein: Code: [AUSKLAPPEN] Type Steintyp
Field X Field Y Field X_Draw Field Y_Draw End Type Global Stein.Steintyp Function Steinfallen_Function() If Stein_Refresh = True Stein_Refresh = False For X=0 To 25 For Y=0 To 25 If map(X,Y) = 3 Stein.Steintyp = New Steintyp Stein\X = X Stein\Y = Y End If Next Next End If For Stein.Steintyp = Each Steintyp Color 255,0,0 Rect Stein\X*32+Stein\X_Draw,Stein\Y*32+Stein\Y_Draw,32,32,0 If (Stein\X = SpielerX) If map(Stein\X,Stein\Y+1) = 1 If Stein\Y = SpielerY-1 Else map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 Stein\Y = Stein\Y +1 End If End If Else If map(Stein\X,Stein\Y+1) = 1 map(Stein\X,Stein\Y) =1 map(Stein\X,Stein\Y+1) = 3 Stein\Y = Stein\Y +1 End If End If Next End Function |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Millisecs![]() 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! |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das weiß ich doch aber ich kann nicht sagen if Zeit = 1 dann falle einmal und wen du fertig bist Zeit = 0
:/ das ist das Prob |
||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey,
sagen wir mal deine tiles sind alle 20*20 px gross. wenn du willst dass 1 tile 20 px pro sekunde faellt, und du mit 1 px pro loop scrollst, dann gilt folgendes: 1000 millisecs / 20 px = 50 millisecs pro px ---> mainloop ---> 1 px scrollen ---> warten bis 50 millisecs rum sind ---> flip 0 beispiel zur veranschaulichung: Code: [AUSKLAPPEN] Graphics 800,600,16
SetBuffer BackBuffer() Local timer%, y% timer= CreateTimer (50) Repeat Cls Rect 20,y,20,20,1 y=y+1 Text 100,y,y WaitTimer (timer) Flip 0 If y>600 Then y=0 Until KeyDown(1) in der realitaet solltest du aber 2 px scrollen, das ist immer noch fluessig. scrollspeed sollte nach bestem spielgefuehl gesetzt werden. also ziemlich am schluss des projectes, nachdem der rest der engine steht. L8er, PSY |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich weiß nicht genau ob das in meinem Prob passend ist.Ich muss ja eigentlich den Code immer nur 1 mal durchlaufen pro Sekunde aber nur dann wen ein stein fällt.Aber ich kann ja leider nicht prüfen ob gerade ein stein fällt.Ich wüsste eigentlich nicht wie :/. | ||
![]() |
PSY |
![]() Antworten mit Zitat ![]() |
---|---|---|
die geschwindigkeit aller einzelbewegungen (spieler läuft, stein fällt, monster bewegt sich....) sollte bei boulderdash clones identisch sein. das ist am einfachsten und läuft am stimmigsten. alle logicchecks sind dann auch ganz easy zu handeln. du weisst genau wann ein kompletter scrollvorgang (1 komplettes tile) durch ist und machst danach den logiccheck des levels (berührt monster player, ist stein auf player gefallen uswusw).
leg dich nicht direkt auf eine bestimmte geschwindigkeit fest. bau mal nen timer ein und test mit der geschwindigkeit ein bischen rum. musst ja nur den 1 wert ändern. sobald du dann scrollen, monster, spielerbewegungen usw eingebaut hast, kannst du den wert nach gefühl anpassen. l8er, psy |
||
PSY LABS Games
Coders don't die, they just gosub without return |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
baue ich den timer ein wird der Spieler auch langsamer :/
EDIT: Code: [AUSKLAPPEN] Global timer = Createtimer(32.25) ;Taste: Pfeil Runter If KeyDown(208) Then If (map(SpielerX,SpielerY+1) = 0) Or (map(SpielerX,SpielerY+1) = 1) Or (map(SpielerX,SpielerY+1) = 2) Or (map(SpielerX,SpielerY+1) = 6) If aa < 1 Move = 1 aa = 1 End If End If End If If Move = 1 Then If aa > 0 ScrollY = ScrollY + 2 SpielerY_Draw = SpielerY_Draw + 2 For Stein.Steintyp = Each Steintyp Waittimer (timer) Stein\Y_Draw = Stein\Y_Draw -2 Next For Diamonds.Diamondstyp = Each Diamondstyp Diamonds\Y_Draw = Diamonds\Y_Draw -2 Next xo = xo + 1 If xo = 16 aa = 0 If map(SpielerX,SpielerY+1) = 0 PlaySound(sfx_schaufeln) End If SpielerY = SpielerY + 1 xo = 0 End If End If End If EDIT: Der Timer stoppt wie Delay das ganze spiel aus..... |
||
Gehe zu Seite Zurück 1, 2, 3 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group