Charakterbewegung mit animation

Übersicht BlitzBasic Allgemein

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

bobokox

BeitragMi, März 18, 2009 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
nach stundenlangem kopfzerbrechen hab ichs geschafft Smile



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

BeitragDo, März 19, 2009 15:30
Antworten mit Zitat
Benutzer-Profile anzeigen
sry, dass ich einen doppelpost mach - ich editiere das ganze nachher Smile





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

BeitragDo, März 19, 2009 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink. Wenn du mit deinem Mapeditor auch noch speicherst wieviel X und Y Felder deine Map hat, kannst du das auch mit einem Dimfeld erledigen. Es gibt vielleicht auch noch bessere möglichkeiten aber so würde ich es machen Wink.

bobokox

BeitragDo, März 19, 2009 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Sad


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

BeitragDo, März 19, 2009 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 19, 2009 20:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 19, 2009 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 19, 2009 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 19, 2009 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, März 19, 2009 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, danke - das erklärt das problem - aber wie soll ichs lösen?
ich kenn da eine möglichkeit mit ner sprungmarke Embarassed Very Happy
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht!

ozzi789

BeitragDo, März 19, 2009 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer braucht goto/gosub

Function Wink
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Xeres

Moderator

BeitragDo, März 19, 2009 21:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

bobokox

BeitragDo, März 19, 2009 21:49
Antworten mit Zitat
Benutzer-Profile anzeigen
@ xeres: das hab ich noch gar nicht bedacht Very Happy - naja, sitz schon seit 10 uhr vormittags vorm computer, das macht müde ^^

@ozzi: das mit den functions werd ich mir noch genauer anschaun, scheint höchst hilfreich zu sein Smile
... sie verurteilen uns nach ihrem scheiß Gesetz: Wer das Geld hat, hat die Macht und wer die Macht hat, hat das Recht!
 

Shoker

BeitragDo, März 19, 2009 23:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Smile

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

BeitragFr, März 20, 2009 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, März 20, 2009 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink.

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group