JoeyJump
Übersicht

Gehe zu Seite Zurück 1, 2, 3, 4 Weiter
wie findet ihr die grafiken? | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||||||
Insgesamt 59 Stimmen |
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lies dir das mal durch, da wird auch gerade darüber diskutiert:
https://www.blitzforum.de/foru...52c1866ff9 Das Berechnen der Kollision durch die Koordinaten (bei rechteckigen Bereichen) habe ich da mal erwähnt (jedenfalls meine Gedanken). Habe noch irgendwo Beispielcode liegen, den kann ich bei Gelegenheit ja mal zeigen... Wenn du die Kollision der Spielfigur auf einen rechteckigen Bereich reduzierst, müsste es gehen, aber ich will dich ja nicht auf dumme Gedanken bringen ![]() Zum Klebenbleiben: Ich hatte das Problem mal mit ImagesCollide, daher hatte ich das vermutet. Es kam weil ich immer abgefragt habe If ImagesCollide() bewegung=0 (in etwa). MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hectic hat Folgendes geschrieben: 1.) Da du ja jetzt eine Fallgeschwindigkeitsvariable hast, kannst du es so machen. Üblich: Position=Position+Geschwindigkeit. Nach einer Kollision dann einmal: Position=Position-Geschwindigkeit. Dieses funktioniert meistens ganz gut, hat aber manchmal, wegen Rundungsfehlern, das Problem das eben nicht ausreichend zurrück positioniert wird. Daher kommt gleich Punkt zwei in Frage:
2.) Immer vor dem ändern der Positionskoordinate sicherst du die Position zusätzlich in eine andere Variable zB: Position_Alt=Position und dann erst Position=Position+Geschwindigkeit. Wenn es zu einer Kollision gekommen ist, machst du dann: Position=Position_Alt. Fertig. ja, das erste hatte ich! dann werd ich mal das zweite probieren... hatte es mir auch schon so in etwa überlegt! |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab gerade mal wieder reingeschaut -das Spiel macht sich ja langsam, was die Optik angeht ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke, x-pressive!
aber das mit dem steckenbleiebn krieg ich noch nicht so richtig hin... beide möglichkeiten funzen net so recht... ich denke, ich werd das zweite level a) modifizieren oder b) ganz rausnehmen das passiert schliesslich nur an dieser einen stelle... |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Welche Kollisionsmethode benutzt du? Die scheint nicht sehr effizient zu sein, die Figur zittert beim Stehen irgendwie wie ein Auto im Standgas.
Versuch's mal mit Kollisionscheck auf Tile-Ebene, also in dem du nicht Pixelweise prüfst oder Image-Kollisionen benutzt (falls du das tust), sondern einfach nur die Position der Figur in die jeweilige Tile-Koordinate auf der Map umrechnest (z.B. Spalte 4, Zeile 5). Je nach Bewegung brauchst du dann nur einige wenige Tiles um die Figur herum checken, also einfach nur im Tile-Array nachgucken, ob da was ist. Bei Bewegungen nach oben nimmst du die Oberkante der Figur und rechnest sie in eine Tile-Position um (dann checken, ob da ein Tile in der Map ist), bei Bewegungen nach unten nimmst du die Unterkante der Figur. Bei Bewegung nach Links die linke Kante der Figur usw. P.S. Gib's doch zu -deine Website wird von der Post gesponsert ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also das zittern liegt nich an der kollisions-erkennung, sondern an der sprung- bzw eher fall-funktion.
aber das krieg ich schon hin (jetzt grade fällt mir nen lösungsansatz ein...) und meine website ist nicht von der Post gesponsert... ![]() ich arbeite dran, sie wird auf jeden fall nochmla komplett erneuert vom design her! |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du brauchst gar nicht ununterbrochen testen, ob die Figur fällt. Checke einfach, ob sich ein Tile unter der Figur befindet (nachsehen im Map-Array). Nur DANN kann sie fallen. Ansonsten brauchst du die "Fallen-Funktion" gar nicht erst aufzurufen.
Aber jetzt sag doch mal bitte, welche Kollisionsmethode du benutzt. Mir kommt sie nämlich sehr uneffizient vor. Du solltest wirklich auf Tile-Abfrage umsteigen, wie oben beschrieben. Das macht alles schneller (und damit meine ich um ein Vielfaches schneller!), aber auch viel einfacher und viel komfortabler. Keinesfalls irgendwelche Pixelabfragen benutzen, so wird das bei einem tile based J&R generell nicht gemacht -und damit wirst du garantiert auch nicht froh werden. |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
guck mal hier:
*klick* |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hm, sagt ja nicht viel -denn die Kollisionsabfragen werden wohl in der Funktion JoeyCollides() stecken.
Aber wie auch immer, siehe oben. Ist nur ein Tipp ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
jo, hast recht:
Code: [AUSKLAPPEN] Function JoeyCollides (joey_tmp_x, joey_tmp_y, fall_var)
For i = 0 To tile_block_number - 1 For a = 0 To tile_block_image_number - 1 ;If (fall_var = 0) Then If ((ImagesCollide (joey_pic_normal_right, joey_tmp_x, joey_tmp_y, joey_frame, tile_block, tile_block_x (a, i), tile_block_y (a, i), a)) Or (ImagesCollide (joey_pic_normal_left, joey_tmp_x, joey_tmp_y, joey_frame, tile_block, tile_block_x (a, i), tile_block_y (a, i), a))) Then Playsound joey_sound_collison Return True EndIf ;ElseIf (fall_var = 1) ;If (RectsOverlap (tile_block_x (a, i), tile_block_y (a, i), tile_width, 1, joey_tmp_x + 1, joey_tmp_y + joey_height - 1, joey_width - 2, 1)) ;PlaySound joey_sound_collison ;Return True ;EndIf ;EndIf Next Next Return False End Function |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ist tile_block_number? Die Funktion läuft doch nicht etwa durch alle vorhandenen Tiles -oder doch? ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ähm...
doch! ![]() tile_block_number = anz. der hinderniss-tiles aber ich finde der speed ist ok so. na gut, eigentlich ist er es nicht... aber lass uns darüber jetzt bitte nicht streiten, okay? |
||
![]() |
Kryan |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich finde vom speed her ist es in ordnung
(sehnsüchtig darauf wart bis das projekt gänzlich scheitert ![]() nee...nun mal im ernst: du kannst doch nicht wirklich so eine uneffiziente kollisionsberechnung da nehmen das tut ja schon in den augen weh...so ein 'imagescollide' in einer zweifachen schleife und somit fast tausende male pro frame durchlaufen wird...naja ![]() |
||
Webspaceanbieter?
Klick hier! Kultige Spieleschmiede? Klick hier! |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich kümmer mich drum! | ||
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
garret hat Folgendes geschrieben: Sieht ganz witzig aus. Hier das, was mir auffiel/in den Sinn kam:
1. Spielfigurbild in zwei Bilder aufgeteilt, joey_blue und joey_blue_left -> kann in ein Bild und ist doch auch schneller als immer zwischen zwei Bildern hin- und herzuschalten. 2. Figur sollte im Stehen nicht hoch und runter "zucken" ![]() 3. Speicherformat in den Maps -> Was für Dateiformate liest du da aus? Eventuell verschlüsseln? 4. Figur kann Block überlappen, einmal verschwand sie bei mir sogar im Boden und war erst nach einem Sprung wieder zu sehen. Ich habe die Screenshots dazu mal hochgeladen: https://www.blitzforum.de/upload/file.php?id=49 5. Lücken zwischen den einzelnen Tiles schließen. Überhaupt ist tiles_40.png 141x41(!) Pixel groß. 6. Level 2 enthält nur 5 Geldsäcke 7. Beim Levelneustart nicht ins Menü wechseln, lieber eine Sicherheitsfrage direkt davor (Level neu starten? j/n) 8. Vielleicht ganz auf die Maus verzichten? Auf Dauer könnte das Hin- und Herwechseln lästig werden. 9. Ein kleiner Mapeditor erleichtert nicht nur dir das Erstellen von Levels. 10. Den Screenshots-Ordner braucht nun wirklich keiner, da die vorhandenen Bilder bis jetzt eher ... mau sind -_-* Wie gesagt, nur Anregungen ![]() MfG garret ERLEDIGT: 2, 4, 6 und 10 |
||
![]() |
garret |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kryan hat Folgendes geschrieben: (sehnsüchtig darauf wart bis das projekt gänzlich scheitert
![]() Das ist nicht mal als Scherz gemeint lustig, noch dazu kritisierst du ihn, ohne eine Lösung anzubieten... ![]() flohrian hat Folgendes geschrieben: ich kümmer mich drum!
Genau. -> Wie groß sollen eigentlich die Level sein? Dann kann ich vielleicht einen alten Mapeditor sponsern (im Sinne von anpassen), solange du keinen Besseren hast ![]() MfG garret |
||
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht) |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
siehe oben:
*klick* |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
@floh: Hier geht es doch nicht um "streiten" oder so. Was meinst du, warum ich seit fünf Posts versuche, dir etwas klarzumachen? Weil ich es einfach schade fände, wenn du dir bei deinem Projekt selbst ein Bein stellst, wo du schon so viel Mühe reingesteckt hast. Wenn das nur ein "zwischendurch-Fun-Projekt" sein sollte, dann ist das okay, das muß ja nicht optimal sein.
Aber falls es das nicht ist, und da das Projekt weiter ausbauen möchtest (oder auch nur, wenn du etwas für dein nächstes, grösseres Projekt lernen möchtest), dann kommst du mit dieser Methode nicht weiter. Bevor ich dich nerve, erkläre ich jetzt zum letzten mal eine Methode, die nicht nur schneller, effizienter, ausbaufähiger ist, sondern auch in der Regel bei tile based Jump & Runs benutzt wird. Danach halte ich meine Klappe und überlasse dir selbst die Entscheidung ![]() Grundprinzip Du hast ja eine Tilemap, also ein Array, in dem das ganze Level gespeichert ist. Das Array sollte in Spalten|Zeilen aufgebaut sein, so das man jede Levelposition mit map(spalte,zeile) abfragen kann. Dort, wo im Array eine 1 steht, ist z.B. eine Mauer. Soweit klar. Die beste Methode ist nun einfach, herauszufinden, welche Position in der Map die Spielerfigur gerade belegt. Wenn sie sich nicht bewegt, ist das recht simpel: Code: [AUSKLAPPEN] ; POSITION DER FIGUR AUF TILEMAP
spalte% = ((x+figure_width /2 ) / tilesize) * tilesize zeile% = ((y+figure_height/2 ) / tilesize) * tilesize x und y sind die linke, obere Ecke der Figur (Pixelkoordinate). Da wir aber vom Mittelpunkt der Figur ausgehen möchten, zählen wir einfach von der linken oberen Ecke figure_width / 2 und figure_height / 2 hinzu. So, jetzt wissen wir, wo in der Tilemap die Figur steht (Spalte und Zeile) und können gezielt im Array nachsehen, ob sich z.B. eine Mauer unterhalb der Figur befindet: Code: [AUSKLAPPEN] If map(spalte,zeile+1) = 1 Then ... ; FIGUR STEHT AUF MAUER
In diesem Fall braucht man die Figur nicht fallen lassen, denn sie steht ja auf festem Boden. Gibt obige Abfrage aber z.B. eine 0 zurück (kein Tile unter der Figur), lässt man sie so lange fallen, bis diese Abfrage wieder ein festes Tile unter der Figur angibt. Kapiert? ![]() Wenn sich die Figur nach links oder rechts bewegt, brauchst du nur die Tiles links und rechts von der Figur checken: Code: [AUSKLAPPEN] If map(spalte-1,zeile) = 1 Then ... ; MAUER LINKS VON DER FIGUR
If map(spalte+1,zeile) = 1 Then ... ; MAUER RECHTS VON DER FIGUR Dann ist der Weg blockiert und die Figur kann nicht in diese Richtung bewegt werden. Während eines Sprungs checkst du die Tiles links, rechts und oberhalb der Figur. Stösst die Figur beim Springen z.B. an ein Tile oberhalb, wird sie gestoppt. So simpel kann das sein. Dabei kann die Map so riesig, wie möglich sein, solche Abfragen verbrauchen kaum Performance. Es ist also völlig unnötig, mit ImageCollide zu testen, oder sogar ALLE Tiles pro Duchlauf zu testen. Du weisst, wohin sich die Figur bewegt, und nur DIESE Tiles werden dann getestet, also z.B. das links von der Figur, das darunter usw. Das ist das Grundprinzip. Da die Figur sich aber "weich" bewegt, und die Spalte/Zeile der Figur sich beim Bewegen apprupt ändern, muss man hier mit einigen Tricks verfeinern, aber wenn du mal eine Stunde über dieses Prinzip meditierst, wirst du sehen, das es wirklich total simpel ist und deine jetzige Methode nur ein selbstgebastelter Rollstuhl. Du machst dir das Leben schwerer als nötig, weil du dich stur an deiner Methode festklammerst ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja, ok x-pressive!
du hast mich überzeugt ![]() ich werd das gleich mal einbaun und bescheid gebn, wenns erledigt ist. ich wollte mich auch nie mit dir oder irgendwem anders "streiten". ich hab nur erst noch an meiner alten methode festgehalten, weil ich dachte, dass ich wenn ich das ändern will wieder so unendlich viel ändern muss. auch das hätte ich irgendwann getan, bloss eben nicht sofort. so wie du es jetzt erklärt hast, ist es aber wirklich sehr verständlich und ich habe gemerkt, dass es wohl doch nicht so lange dauert oder besonders aufwendig ist. ich informier dich/euch auf jeden fall, wenn es was neues gibt. mfg floh |
||
flohrian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, also annähernd funktionierts, wenn man das letzte Code: [AUSKLAPPEN] * tilesize weglässt.
bloss nimmt er dann halt den mittelpunkt der figur als grenze, d.h., amn kann fast zur hälfte in die tiles reingehen/springen/fallen ![]() sieht voll lustig aus. ich denke, man muss um das zu verbessern einfach nur alle vier eckpunkte der figur durch die überprüfung lassen, statt einmal den mittelpunkt. werds testen und dann bescheid geben. |
||
Gehe zu Seite Zurück 1, 2, 3, 4 Weiter
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group