jump 'n run - spielfigur immer auf dem terrain halten

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

xig

Betreff: jump 'n run - spielfigur immer auf dem terrain halten

BeitragMo, Jul 12, 2004 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey, mein erster Beitrag. Wink

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. Sad

Slayer

BeitragMo, Jul 12, 2004 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Cerbus hat Folgendes geschrieben:
Hey, mein erster Beitrag. Wink

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. Sad


Naja , ist ja auch Dein erste beitrag Wink

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


user posted image

user posted image
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version
 

xig

BeitragMo, Jul 12, 2004 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jul 12, 2004 23:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile
AMD2500XP, SB5.1, DX9, 512MB DDR333,
XPPro SP1a,ATI 9800SE 256bit 128MB,B3B, B+ immer die neue Version

Jan_

Ehemaliger Admin

BeitragDi, Jul 13, 2004 7:41
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, für worms clon, währe eine TEchnik sehr wichtig, die Pixel des Terrains um die Figur abzufragen!
between angels and insects

Travis

BeitragDi, Jul 13, 2004 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Kabelbinder

Sieger des WM-Contest 2006

BeitragDi, Jul 13, 2004 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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>

BladeRunner

Moderator

BeitragDi, Jul 13, 2004 18:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group