JoeyJump

Übersicht Sonstiges Projekte

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

Neue Antwort erstellen

wie findet ihr die grafiken?
suuper (wird wahrscheinlich eh nich benutzt ;) ) 1% 1% 1 Stimmen
gut 3% 3% 2 Stimmen
ganz ok 28% 28% 17 Stimmen
naja, ich weiss nicht... 23% 23% 14 Stimmen
blöd 23% 23% 14 Stimmen
was ist das denn fürn schrott (wird hoffentlich auch nicht benutzt ;) ) 18% 18% 11 Stimmen
Insgesamt 59 Stimmen

garret

BeitragMo, Mai 01, 2006 11:47
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile Am Ende geht nichts mehr wegen meiner dummen Idee... -_-*

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

BeitragMo, Mai 01, 2006 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDo, Mai 04, 2006 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab gerade mal wieder reingeschaut -das Spiel macht sich ja langsam, was die Optik angeht Wink Die Grafiken wirken schon viel besser (der Screenshot vom Game macht schon was her und sieht schon klasse aus). Nur der Splashscreen ist noch utze-hässlich, direkt gesagt. Hier könntest du schon noch was machen (die Farben beissen einem Löcher in die Augen und er wirkt wie aus Spectrum 16K-Zeiten). Aber sonst macht sich bis jetzt ja ganz gut!
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

flohrian

BeitragDo, Mai 04, 2006 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 05, 2006 6:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

flohrian

BeitragFr, Mai 05, 2006 7:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Wink
ich arbeite dran, sie wird auf jeden fall nochmla komplett erneuert vom design her!

x-pressive

BeitragFr, Mai 05, 2006 8:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 05, 2006 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
guck mal hier:
*klick*

x-pressive

BeitragFr, Mai 05, 2006 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

flohrian

BeitragFr, Mai 05, 2006 12:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Mai 05, 2006 15:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Was ist tile_block_number? Die Funktion läuft doch nicht etwa durch alle vorhandenen Tiles -oder doch? Shocked
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

flohrian

BeitragFr, Mai 05, 2006 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ähm...
doch!
Embarassed

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

BeitragFr, Mai 05, 2006 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich finde vom speed her ist es in ordnung

(sehnsüchtig darauf wart bis das projekt gänzlich scheitert Razz )

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 Idea
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

flohrian

BeitragFr, Mai 05, 2006 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
ich kümmer mich drum!
 

flohrian

BeitragFr, Mai 05, 2006 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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" Wink -> nur wenn sie sich bewegt, oder speziell eine Animation für's Stehen

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 Wink Viel Erfolg weiterhin.

MfG garret


ERLEDIGT:

2, 4, 6 und 10

garret

BeitragFr, Mai 05, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Kryan hat Folgendes geschrieben:
(sehnsüchtig darauf wart bis das projekt gänzlich scheitert Razz )


Das ist nicht mal als Scherz gemeint lustig, noch dazu kritisierst du ihn, ohne eine Lösung anzubieten... Rolling Eyes

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 Wink


MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)
 

flohrian

BeitragFr, Mai 05, 2006 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
siehe oben:

*klick*

x-pressive

BeitragSa, Mai 06, 2006 6:21
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Wink

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? Wink

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 Wink
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

flohrian

BeitragSa, Mai 06, 2006 8:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, ok x-pressive!

du hast mich überzeugt Wink
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

BeitragSa, Mai 06, 2006 9:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
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

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group