Charakterbewegung mit animation
Übersicht

![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
nach stundenlangem kopfzerbrechen hab ichs geschafft ![]() Code: [AUSKLAPPEN] If KeyDown(17) And map(((xp+16)/64),((yp-Steps+48)/64)-(1/Steps))>0 And map(((xp+40)/64),((yp-Steps+48)/64)-(1/Steps))>0 Then Frame=3:YP=YP-STEPS: ani=(ani+1) Mod 3 If KeyDown(31) And map((xp+16)/64,(yp/64)+1)>0 And map((xp+40)/64,(yp/64)+1)>0 Then Frame=0:YP=YP+STEPS: ani=(ani+1) Mod 3 If KeyDown(32) And map(((xp-16)/64)+1,(yp+56)/64)>0 And map(((xp-48)/64)+1,(yp+56)/64)>0 Then Frame=6:XP=XP+STEPS: ani=(ani+1) Mod 3 If KeyDown(30) And map((xp-Steps+16)/64-(1/Steps),(yp+56)/64)>0 And map((xp-Steps+48)/64-(1/Steps),(yp+56)/64)>0 Then Frame=9:XP=XP-STEPS: ani=(ani+1) Mod 3 hab auch alles noch schön angepasst, also nicht wunder über die zahlen +- px/py. Edit: und da meint man man blickt jetzt durch, und schon tut sich das nächste prob auf: so, 1 map feddich und schön begehbar. Wenn ich aus dieser map rausrenne, endet das programm - logisch. Nur, wie kann ich am bessten in die nächste map springen - also ich will, bei passierung des bildschirmendes, am bildschirmanfang der nächsten map stehen - ala zelda z.B. mir, als alten hc-codeverkomplizierer fiel als erstes ein: ich kopier die ganze codewurst, die ich bis jetzt gemacht habe, und ändere die map, und schreib in die schleife der 1. map ein einfaches if xp/64=15 then xp=0: gosub map2 störn tut mich bei der ganzen sache: 1. das gosub, da ich das möglichst vermeiden möchte, und 2. die ewige codewurst. das zweite was ich mir gedacht hätte: ich erstelle alle meine maps am anfang, und tausche sie dann im draw-befehl nach bildschirmende aus, mit einer variable. allerdings denke ich mir, dass ich bei dieser möglichkeit später schwierigkeiten haben könnte aktionen in die map einzubauen ?! wie würdet ihr das machen?? thx!! lg bobokox |
||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
- Zuletzt bearbeitet von bobokox am Do, März 19, 2009 21:08, insgesamt einmal bearbeitet
![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
sry, dass ich einen doppelpost mach - ich editiere das ganze nachher ![]() und da meint man man blickt jetzt durch, und schon tut sich das nächste prob auf: so, 1 map feddich und schön begehbar. Wenn ich aus dieser map rausrenne, endet das programm - logisch. Nur, wie kann ich am bessten in die nächste map springen - also ich will, bei passierung des bildschirmendes, am bildschirmanfang der nächsten map stehen - ala zelda z.B. mir, als alten hc-codeverkomplizierer fiel als erstes ein: ich kopier die ganze codewurst, die ich bis jetzt gemacht habe, und ändere die map, und schreib in die schleife der 1. map ein einfaches if xp/64=15 then xp=0: gosub map2 störn tut mich bei der ganzen sache: 1. das gosub, da ich das möglichst vermeiden möchte, und 2. die ewige codewurst. das zweite was ich mir gedacht hätte: ich erstelle alle meine maps am anfang, und tausche sie dann im draw-befehl nach bildschirmende aus, mit einer variable. allerdings denke ich mir, dass ich bei dieser möglichkeit später schwierigkeiten haben könnte aktionen in die map einzubauen ?! wie würdet ihr das machen?? thx!! lg bobokox |
||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
Shoker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also mit den Kartenwechsel habe ich noch keine erfahrungen gemacht. Aber ich würde eine große Map bauen (am besten einen eigenen Mapeditor basteln) und das scrolling dann anpassen. Denke das sollte möglich sein... Und nur das Zeichnen was zu sehen ist. Wenn du dann von der Map runter musst (wegen Dungeon usw.), lädst du einfach eine andere Map ein ![]() ![]() |
||
![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
find ich ganz gut deine idee - nur will ich nicht das mitgescrollt wird, sondern das der char auf einer map rumläuft und sobald er am bildrand ist auf die nächste map kommt.
das mit dem mapeditor ist auf jeden fall eine gute idee, hab mir gleich einen gebastelt. aber jetzt steck ich wieder: hab jetzt 2 maps, eine heist map 13 und eine map 14. wenn man bei map 13 auf tile 15 rennt soll map 14 erscheinen, leider machts das nicht. Theorie: hab eine variable namens karte$ map13 laden lassen - diese variable hab ich vor der hauptschleife "den wert" map13 gegeben. dann wird karte$ in der hauptschleife erstellt. wenn jetzt xp/64=15 dann sollte karte$ mit map14 überladen werden... Nur, wenn ich das programm starten will, und sich die zeilen Dim map(15,11) For x = 0 To 15 For y = 0 To 11 tile = ReadLine(karte$) ; [i]<- Stream does not exist map(x,y) = ReadInt(karte$) DrawImage tileset,x*64,y*64,map(x,y) Next Next CloseFile(karte$)[/i] in der hauptschleife befinden, schreit bb: stream does not exist ![]() hier mal mein code: Code: [AUSKLAPPEN] Graphics 1024,768,0,1
SetBuffer BackBuffer() Const STEPS=8 karte$ = ReadFile("map13.map") Local Timer=CreateTimer(10) Local Tileset=LoadAnimImage("tiles1.bmp",64,64,0,19) Local Charend=LoadAnimImage ("charend.bmp", 64,64,0,12) Local XP,YP Local XS,YS Local Frame xp=128 yp=110 While Not KeyHit(1) Dim map(15,11) For x = 0 To 15 For y = 0 To 11 tile = ReadLine(karte$) map(x,y) = ReadInt(karte$) DrawImage tileset,x*64,y*64,map(x,y) Next Next CloseFile(karte$) Cls For YS=0 To 11 For XS=0 To 15 DrawImage Tileset,XS*64,YS*64,map(XS,YS) Next Next If KeyDown(17) Then Frame=3 If KeyDown(31) Then Frame=0 If KeyDown(32) Then Frame=6 If KeyDown(30) Then Frame=9 If KeyDown(17) And map(((xp+16)/64),((yp-Steps+48)/64)-(1/Steps))<13 And map(((xp+40)/64),((yp-Steps+48)/64)-(1/Steps))<13 Then Frame=3:YP=YP-STEPS: ani=(ani+1) Mod 3 If KeyDown(31) And map((xp+16)/64,(yp/64)+1)<13 And map((xp+40)/64,(yp/64)+1)<13 Then Frame=0:YP=YP+STEPS: ani=(ani+1) Mod 3 If KeyDown(32) And map(((xp-16)/64)+1,(yp+56)/64)<13 And map(((xp-48)/64)+1,(yp+56)/64)<13 Then Frame=6:XP=XP+STEPS: ani=(ani+1) Mod 3 If KeyDown(30) And map((xp-Steps+16)/64-(1/Steps),(yp+56)/64)<13 And map((xp-Steps+48)/64-(1/Steps),(yp+56)/64)<13 Then Frame=9:XP=XP-STEPS: ani=(ani+1) Mod 3 If xp/64=15 Then karte$ = ReadFile("map14.map"): xp=0 DrawImage Charend,XP,YP,Frame + ani WaitTimer Timer Flip 0 Wend End |
||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mach mal das $ hinter karte weg. | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, leider immer noch das selbe problem: stream does not exist | ||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn das $ überall weg ist, könnte es noch daran liegen, dass die Datei nicht existiert...
(Dim map(...,..) muss übrigens nicht in die Hauptschleife) |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
doch, die datei existiert - wird ja auch wunderbar angezeigt, wenn ich die variable in die schleife packe... | ||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schau mal genau hin, du hast da n CloseFile(karte) drinnen was du nach eigenen Angaben in der hauptschleife ausführst. (Wenn der Hinweis nichts nützen sollte... Überleg dir trotzdem wo du ne Datei öffnest und wo schließt. Das ist wichtig, auch wenn cih mir nicht den ganzen Code genau angeschaut habe. | ||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, danke - das erklärt das problem - aber wie soll ichs lösen?
ich kenn da eine möglichkeit mit ner sprungmarke ![]() ![]() |
||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wer braucht goto/gosub
Function ![]() ![]() |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du lädst die Karteninformationen und zeigst sie im gleichen Schritt an... Stattdessen solltest du die Daten einmal aus der Datei laden (vor der Hauptschleife) und dann nur noch anzeigen (in der Hauptschleife). | ||
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) |
![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ xeres: das hab ich noch gar nicht bedacht ![]() @ozzi: das mit den functions werd ich mir noch genauer anschaun, scheint höchst hilfreich zu sein ![]() |
||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
Shoker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wofür steht den die Variable Tile ? Weil du die bei jedem ForSchleifen durchgang lädst.
Und schau dir mal an ob du wirklich Integer speichern/laden musst... ![]() Dim Map und die beiden Read befehle die in der For schleife sind brauchst du nicht in die Hauptschleife machen. Das hier über die While schleife. Code: [AUSKLAPPEN] Laden = OpenFile("map13.map") tile = ReadLine(Laden) For x = 0 To 15 For y = 0 To 11 map(x,y) = ReadInt(Laden) Next Next Closefile Laden und hier wenn er auf Tile 15 kommt. Code: [AUSKLAPPEN] If xp/64=15 Then Laden = OpenFile("map14.map") tile = ReadLine(Laden) For x = 0 To 15 For y = 0 To 11 map(x,y) = ReadInt(Laden) Next Next Closefile Laden Xp = 0 Ich lasse die Variable Tile hier nur einmal laden. Übrigens überprüfst du nur ob er auf der X Achse auf Tile 15 steht... |
||
![]() |
bobokox |
![]() Antworten mit Zitat ![]() |
---|---|---|
also, wenn ich deinen code nehme, dann gehts leider nicht - aber ich habe meinen code zum karte laden genommen und dein prinzip und es funzt wunderbar!
Danke! |
||
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht! |
Shoker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ja, Habe meinen Code nicht getestet und ´wahrscheinlich liegt es daran dass du die variable Tile jedesmal mit abspeicherst und ich es aber nur einmal lade.. dadurch verrückt sich alles ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group