jump 'n run - spielfigur immer auf dem terrain halten
Übersicht

xigBetreff: jump 'n run - spielfigur immer auf dem terrain halten |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mal angenommen ich programmiere ein jump and run, und als terrain benutze ich eine hügelige (2d) langschaft. wie schaffe ich das, dass sich die spielfigur immer dem boden gemäß läuft, also weder durch hügel hindurchwandert, noch über täler "hinwegschwebt". und wie kann man zu steile hügel/stufen bauen wo die spielfigur nur rüberspringen kann, nicht aber drüberlaufen
danke... |
||
Timo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
wenn du deine Landschaft in Tiles ( Quadrate ) aufteilst, kannst du für jedes festlegen, ob es durchwanderbar ist oder nicht...
ein Berg wäre dann also eine Art Treppe von undurchwanderbaren Tiles. |
||
![]() |
Cerbus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey, mein erster Beitrag. ![]() Das die Figur immer gleich bleibt, geht eigentlich ganz einfach. (kann noch keine Jump and Runs proggen, weil mir die Erfahrung fehlt, ist aber eigentlich ganz logisch). du gibts der Figur einen X und Y Startwert. Samit die Figur nicht durch den boden fällt, kann man das durch eine IF Abfrage überprüfen. Beispielsweise (Pseudocode) Code: [AUSKLAPPEN] If x < 0 Then x = 0
So kann es nicht passieren, das die Spielfigur zu weit nach unten gelangt. Hoffe ich konnte helfen. ^^ Das andere kann ich dir leider nicht beantworten. ![]() |
||
![]() |
Slayer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Cerbus hat Folgendes geschrieben: Hey, mein erster Beitrag.
![]() Das die Figur immer gleich bleibt, geht eigentlich ganz einfach. (kann noch keine Jump and Runs proggen, weil mir die Erfahrung fehlt, ist aber eigentlich ganz logisch). du gibts der Figur einen X und Y Startwert. Samit die Figur nicht durch den boden fällt, kann man das durch eine IF Abfrage überprüfen. Beispielsweise (Pseudocode) Code: [AUSKLAPPEN] If x < 0 Then x = 0
So kann es nicht passieren, das die Spielfigur zu weit nach unten gelangt. Hoffe ich konnte helfen. ^^ Das andere kann ich dir leider nicht beantworten. ![]() Naja , ist ja auch Dein erste beitrag ![]() Das ist nicht ganz so einfach, hier muss man ziemlich oft auf pixelkolli prüfen. Oder Du machst es so wie in einer Tileengine, nur in einem begrenzten raum auf Kolli prüfen. Edit: Kleines einfaches beispiel ![]() Code und Bilder Code: [AUSKLAPPEN] Graphics 640,480,16,2
SetBuffer BackBuffer () Global bild1 = LoadImage ("1.png") Global bild2 = LoadImage ("2.png") Global x = 50,y = 50 While Not KeyHit(1) DrawImage bild2,0,0 DrawImage bild1,x,y If KeyDown (203) Then x = x - 1 If KeyDown (205) Then x = x + 1 If ImagesCollide (bild1,x,y,0,bild2,0,0,0) y = y - 2 col = 1 Else y = y + 2 col = 0 EndIf Text 10,10,col Flip:Cls Wend : End ![]() ![]() |
||
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version |
xig |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
joa danke slayer,d as beispiel is ganz n1, aber veränder mal die kugelgeschwindigkeit auf 4 oder so, udn kuck was dann passiert. genau der effekt den ich vermeiden möchte, quasi die kugel geht in die landschaft rein dun klettert wieder raus | ||
![]() |
Slayer |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jep, ich weis schon was Du meinst.
War nur ein simples beispiel. Du musst natürlich zuerst das ganze berechnen, hier brauchst Du dann noch, hmmm wie sag ichs, koordinaten von dem Punkt wo die kollision statt findedet, dann musst Du x,y koordinaten vom Ball von dem Untergrund abziehen, jetzt erst zeichnen. Dann entsteht nicht der effekt wie Du ihn beschreibst. Das beispiel ist sowieso nicht so optimal, da hier auf dem Ganzen Bildschirm auf pixelkolision geprüft wird, mach das programm sehr langsam. Du kannst auch die kollisions punkte voraus berechnen und in einer liste speichern, so das der ball schon vorher weis, an der und der koordinate darf mein y wert nicht höher sein als 300....... Aber wie oben schon sagte, es ist nicht ganz so einfach wie die kolision mit klötzchen zu machen. Wirst das schon hinbekommen ![]() |
||
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version |
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
hm, für worms clon, währe eine TEchnik sehr wichtig, die Pixel des Terrains um die Figur abzufragen! | ||
between angels and insects |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann es ja im Kollisionsfall auch so machen, dass der Y-Wert der Kugel in einer Schleife (While...Wend) so lange immer jeweils um Eins verringert wird, bis keine Kollision mehr stattfindet. Damit läuft das Beispiel z.B. auch mit einer Geschwindigkeit von 4.
Code: [AUSKLAPPEN] If ImagesCollide (bild1,x,y,0,bild2,0,0,0) While ImagesCollide(Bild1,x,y,0,bild2,0,0,0) y = y - 1 col = 1 Wend Else y = y + 2 col = 0 EndIf Text 10,10,col |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde dafür aber nicht ImagesCollide() sondern ImageRectCollide() nehmen:
Das ist erstens schneller und zweitens ist es mit ImagesCollide() so gut wie unmöglich eine Decke, unter der man sich den Kopf stößt, oder hohe Kanten, die man nicht ohne zu sprignen erklimmen kann, einzubauen. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Benutze Tiles fur deinen Untergrund. Dann hast du 2 Möglichkeiten:
1. Prüfen auf Kollision mit ImageCollide und Nachbessern der Position oder 2. Du erstellst eine Liste in der für jedes Tile für alle X-Werte die entsprechende Höhe eingetragen ist. Wenn du diese Liste bei der Bewegung deiner Figur mit einbeziehst läuft sie dann wie auf Schienen. Bsp: Code: [AUSKLAPPEN] Tile1 Tile2 .=leer x=Boden ..... ..... ....x xx... ...xx xxx.. xxxxx xxxx. xxxxx xxxxx Dann wäre die Liste für Tile1: 2,2,2,3,4 für Tile2: 4,4,3,2,1 Bei der Spielfigur müsste dann der Eintrag der der x-Pos entspricht als Offset von der Y-Achse abgezogen werden. |
||
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group