Kollision + Animation bei Tilemap Probleme
Übersicht

![]() |
GearTechDEehemals 'KillerJo96'Betreff: Kollision + Animation bei Tilemap Probleme |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, ich bin im Moment ja dabei, mit Tiles und so zu arbeiten.
Habe jetzt auch schon meine erste Map (Juhu) und einen kleinen Character Tile. Ich habe genau 2 Probleme. 1. Ich habe eine normale Map mit Data gemacht (20x20). Jetzt hab ich aber keinen Schimmer wie ich das angehen soll. Könnte mir vllt. einer einen Beispiel Code posten? Wäre echt hilfreich. 2. Ich habe ein Tileset mit vielen verschiedenen Charakteren drauf. Alle Charaktere zeigen einmal in alle Richtungen... So jetzt habe ich es so gemacht: Ich habe jeweils ne Variable erstellt: Code: [AUSKLAPPEN] Global PlayerX Global PlayerY Global FRAME So... Dann in der Loop: Code: [AUSKLAPPEN] DrawImage CHARTILE,PlayerX,PlayerY,FRAME Dann auch noch für die Tastenbelegung... Code: [AUSKLAPPEN] If KeyDown(17) Then PlayerY = PlayerY - 1 : FRAME = 0 If KeyDown(31) Then PlayerY = PlayerY + 1 : FRAME = 65 If KeyDown(32) Then PlayerX = PlayerX + 1 : FRAME = 33 If KeyDown(30) Then PlayerX = PlayerX - 1 : FRAME = 97 Somit ist die FRAME Anzahl immer das Tile, welches gemalt werden soll, wenn der Charakter nach z.B. rechts laufen soll. Jedoch gibt es für jede Richtung 2 verschiedene Bewegungen für eine Animation wie z.B. laufen. Jetzt weiß ich nicht wirklich, wie ich die 2 Tiles immer abwechselnd zeichnen soll. Ich hoffe ihr versteht so ganz grob was ich meine xD LG Killerjo96 |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Beispielcode für was? Hast du die Robsite Tutorials zum Thema RPG durch?
Frames abwechseln würde ich mit einem Millisecs ![]() |
||
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) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja aber wie mit dem Millisecs
Edit: Bei dem Tutorial von Robsite ... welches ist das denn.. sind ja mehrere? Die 1-6 Teile da? Weil da wird nicht genau mein Problem geschildert... sondern macht der das anders. |
||
Mit freundlichen Grüßen: GearTechDE |
- Zuletzt bearbeitet von GearTechDE am Mi, Jul 06, 2011 21:12, insgesamt einmal bearbeitet
![]() |
Sir Gauss der III |
![]() Antworten mit Zitat ![]() |
---|---|---|
die Frage 1 kann ich grad nicht so nach vollziehen.
zur Frage 2, allgemein zu abläufen: erstell eine Zustandsvariable für den Charakter und eine zeitvariable in der ersteren speicherst du in welchem Modus sich dein Charakter befindet (z.B. 1 für gehen; 0 für stehen ...) in der zweiten, wie lange er sich maximal darin befinden soll (je nach Framrate usw) dann zählst du die zeitvariable einfach runter, bei null angelangt verändert sich der Zustand (zb in 2 für gehen zweites Bild) den Zustand zählst du dann immer zur Richtung dazu um das entsprechende Bild auszulesen. Code: [AUSKLAPPEN] zeit=10
zustand=1 richtung=1 Repeat zeit=zeit-1 If zeit<=0 Then If zustand>0 Then zustand=2-zustand EndIf zeit=10 EndIf DrawImage bild,x,y,richtung+zustand Until ... hoffe das hilf |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Forensuche millisecs und timer sollte mehrere brauchbare ergebnisse liefern.
EDIT: Sir Gauss, Zählvariablen laufen auf jedem Rechner unterschiedlich schnell. Das war auf dem C64 in Ordnung, heutzutags ist das voll daneben ![]() |
||
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 |
- Zuletzt bearbeitet von BladeRunner am Mi, Jul 06, 2011 21:08, insgesamt einmal bearbeitet
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzBasic: [AUSKLAPPEN] LaufFrame = 1- LaufFrame |
||
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, erstmal drüber nachdenken was die Profis schreiben.. und ausprobieren.
Danke für die Antworten. |
||
Mit freundlichen Grüßen: GearTechDE |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde dazu raten, ein-zwei variablen im Charakter Type anzulegen.
Wahlweise, falls kein Charakter-type vorhanden ist, tuts eine globale, erstmal testweise ![]() BlitzBasic: [AUSKLAPPEN] Local frame:Int = 0 mit 'action' bezeichne ich immer eine aktion die ein Charakter grade durchführt. zb: Gehen. Im idealfall sind deine animationen so geordnet, das du zb immer 8 bilder pro 'aktion' hast, somit kannst du action als faktor nehmen. Frame hingegen ist eine angabe, welcher frame der momentanne aktion läuft. So kannst du 'frame' umschalten, zb alle 250ms. Hierzu ein kleines beispiel: BlitzBasic: [AUSKLAPPEN] If KeyDown(17) Then So, das war eine grobe erklärung meinerseits. Um noch genauer auf das Zeitliche umschalte einzugehen, schauen wir uns nocheinmal das hier an: BlitzBasic: [AUSKLAPPEN] If char_timer < MilliSecs() Then Millisecs() liefert die anzahl der millisekunden! seit computer start. Es ist also anzunehmen, das es diese Zahl recht gut tut ![]() char_timer <- Das ist eine variable, die das letzte umschalten der Variable speichert! beim umschalten siehst du, das char_timer = Millisecs()+250 gemacht wird. Die 250 steht für 250ms in der Zukunft, es ist also davon auszugehen, das das umschalten immer nach etwa 250 ms geschieht, da ich pro aufruf prüfe, ob char_timer KLEINER millisecs() ist. Bei einem umschalten passierts nun: Ms ist 1000. char_timer ist 0. char_timer wird auf 1000+250 == 1250 gesetzt. 251 ms später sieht das ganze soi aus, das char_timer < Millisecs() ist, somit gibts wieder ein match. Und nun zum letzten - das umschalten zwischen 1 und 0. Local x = 1 x = 1-x ; 1-1 == 0! x = 1-x ; 1-0 == 1! x = 1-x ; 1-1 == 0! e voila! ein umschalter. Es mag allerdings etwas doof sein, das man für jeden der tasten eine identische If abfrage nutzt, das erhöht die fehlerquote. Nunja, man könnte das ganze auch auslagern, aber was solls. Die arbeit liegt bei dir, ich habe dir nur eine simple möglichkeit mit blöden rahmenbedingungen genannt, die schönste ist es trotzdem nicht ![]() Vielleicht hilfts ja! Ps: Ich hoffe der code ist so einigermaßen okay, ich kann Blitz Basic nimmer :< Nurnoch blitzmax. Ansonsten musst du es sinngemäß abschreiben! ![]() Nachtrag: Solltest du mehr frames wie 2 haben, kannst du evtl MOD benutzen. Mod gibt den rest einer Division zurück! also könntest du zb so hochzählen: Frame = (1+frame) Mod FrameZahl Solange frame kleiner als FrameZahl bleibt, ist alles okay. In dem moment, wo beide gleichgroß sind, wird 'frame' auf 0 gesetzt! das solltest du beim verwenden beachten ![]() |
||
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok danke, werde das jetzt bald mal ausprobieren und dann lernen xD, dann wäre mein einziges Problem nur noch die Kollision, welche ich nicht hinkriege. am besten wäre ein kompleeter Beispiel Code. darunter kann ich mir am bestem vorstellen wie sowas funktioniert. dann versuche ich mir den anzugucken und zu lernen... | ||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Es gibt Tutorials (siehe oben) die auch Kollision beinhalten und das Forum sollte auch vor Tilemap Kollision überquellen - da machst du dich mit bitten um eine Extra-Wurst nicht unbedingt beliebt. Alles was du willst gibt es schon, du müsstest nur suchen. | ||
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) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Na... gut... man brauch sich ja nicht direkt so aufzuregen... | ||
Mit freundlichen Grüßen: GearTechDE |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das war noch sehr höflich von Xeres formuliert. Wenn Du willst dass dir geholfen wird zeig dass Du selbst willens bist dir zu helfen. | ||
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 |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okey, okey... tut mir Leid... verstehe das i-wie komplett falsch ... | ||
Mit freundlichen Grüßen: GearTechDE |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group