jump n run auf tile basis

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

diGGa

GruppenKaspar

Betreff: jump n run auf tile basis

BeitragDi, März 22, 2005 0:03
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, ich versuch mich grad an nem jum n run... ich benutz dafür ne mischung aus den techniken vom jump n run und rpg tut (von robs site)...
mischung weil im jump n run die colli nich richtig funzt... man kann sich an die plattformen hängen und das will ich ja nich Wink

mein problem atm sind nun die bewegung und springen. gut springen ist erstmal nicht so wichtig. eher interessiert mich wie ich ne flüssige bewegung aber dennoch genaue, d.h. 32 pixel, tile kolli schaffe.

zuerst: ich will hier keine lösung präsentiert bekommen.. ich möchte denk ansätze und vll links zu tuts/artikeln wo dieses problem behandelt wird Smile

hier mal ne zip mit source und tileset. (3kb)
(bitte vergesst die grafiken einfach xD)

//////////////////////
edit
/////////////////
ok flüssige bewegungen klappt... problem is jetzt nur das sich die "kollisionsmap" irgendwie verschiebt...
neuer code(nicht in zip enthalten):
BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,32,1
SetBuffer BackBuffer()
frametimer = CreateTimer (60) ;Um das Spiel auf alle Rechnerkonfigurationen gleich schnell laufen
Origin 160, 60

; ressourcen laden
Global tileset = LoadAnimImage(\"tileset.bmp\",32,32,0,2)
Global char = LoadImage(\"char.bmp\") : MaskImage char, 255, 0, 255
Global verdana = LoadFont(\"verdana\", 12, True, False, False)
SetFont verdana

; map initialisieren
Global map_size_x = 15
Global map_size_y = 15
Dim map(map_size_x,map_size_y)

; datenfeld einlesen
Restore level1

For y = 0 To map_size_y - 1
For x = 0 To map_size_x - 1
Read map(x,y)
Next
Next

; spieler
;x start posi
Global player_x = 1
Global player_move_x = player_x * 32
;y start posi
Global player_y = 13
Global player_move_y = player_y * 32
;eigenschaften
Const player_speed = 4

; keys
Const key_rauf = 200
Const key_runter = 208
Const key_links = 203
Const key_rechts = 205

;##### schleife ###############
Repeat
Cls
WaitTimer (frametimer) ;Den gewählten Zeitgeber warten
Color 255,255,255
Text 0, -15, \"UNGLAUBLICH TOLLES SPIEL 7 (mit bugs)\"

player_x = player_move_x / 32
player_y = player_move_y / 32

zeichne_map()
spieler_bewegen()
zeichne_player()

Flip
Until KeyHit(1)
End



;###################################################################################################################
;##### funktionen ###############
Function zeichne_map()
For y = 0 To map_size_y - 1
For x = 0 To map_size_x - 1
DrawImage tileset,x*32,y*32,map(x,y)
Next
Next
End Function

Function spieler_bewegen()
If KeyDown(key_runter) Then
If map(player_x,player_y+1) < 1 Then ; \"< 1\" = kollisionsabfrage: alle tiles mit nummer < 1 sind passierbar
player_move_y = player_move_y + player_speed
End If
End If

If KeyDown(key_rauf) Then
If map(player_x,player_y-1) < 1 Then
player_move_y = player_move_y - player_speed
End If
End If

If KeyDown(key_links) Then
If map(player_x-1,player_y) < 1 Then
player_move_x = player_move_x - player_speed
End If
End If

If KeyDown(key_rechts) Then
If map(player_x+1,player_y) < 1 Then
player_move_x = player_move_x + player_speed
End If
End If
End Function

Function zeichne_player()
Local player_x_zeichnen = player_move_x
Local player_y_zeichnen = player_move_y
DrawImage char,player_x_zeichnen,player_y_zeichnen
End Function

;##### maps ############### (0=platten 1=mauer)
.level1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
Data 1,0,0,0,0,0,0,0,0,0,1,0,0,0,1
Data 1,0,1,1,1,1,0,0,0,0,1,0,0,0,1
Data 1,0,1,1,1,1,0,0,0,0,1,0,0,0,1
Data 1,0,1,1,1,1,0,0,0,0,1,1,1,0,1
Data 1,0,1,1,1,1,0,0,0,0,0,0,0,0,1
Data 1,0,1,1,1,1,0,0,0,0,0,0,0,0,1
Data 1,0,1,1,1,1,0,0,0,0,0,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,1,1,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,1,0,0,0,1
Data 1,0,0,0,0,0,0,0,1,1,1,0,0,0,1
Data 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1
Data 1,0,0,1,1,1,1,0,0,0,0,0,0,0,1
Data 1,0,0,1,0,0,0,0,0,0,0,0,0,0,1
Data 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
  • Zuletzt bearbeitet von diGGa am Di, März 22, 2005 15:12, insgesamt einmal bearbeitet

Ebola33

BeitragDi, März 22, 2005 4:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
du solltest nicht nur mit Tutorials lernen. Wenn du bereits so weit bist eine Tilemap zu erstellen dann sollte es für dich kein Problem darstellen einen 2. Layer mit ner collisions Map hinzuzufügen(ein wenig deine Denksülze anstrengen musst du allerdings). Wink
Geht auch anders, aber ist besser wenn du selber drauf kommst.
Das Verständnis der Befehle imagescollide(für pixelgenau) oder imagerectoverlap(tilegenau) reichen da völlig.



Mfg Ebola
ansteckend... Wink
verstaubtes Projekt : http://www.mitglied.lycos.de/ebola33/

diGGa

GruppenKaspar

BeitragDi, März 22, 2005 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ja n 2. drüber ballern wäre ne möglichkeit.. hab ich auch schon dran gedacht, nur dachte ich vll gehts ja auch so weil naja läuft ja mehr oder weniger nur irgendwo muss n denkfehler drinne sein xD

////
hab ma neu strukturiert n bissl und hcohgeladen
http://www.blitz-pasting.de.vu...e=tile.rar

diGGa

GruppenKaspar

BeitragDi, März 22, 2005 20:37
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, smoothe bewegungen hab ich nu hinbekommen und auch die colli stimmt dafür Smile

nu kommts... sprung routine. ich orientiere mich dabei am jump n run tut setz das ganze aber neu um, halt mit neuen vars und nich direkt kopieren/abschreiben sondern hingucken und umsetzen etc., dann neu kommentieren etc damit ichs wirklich versteh. aber irgendwie stimmt bei mir was nicht xD

hier mal meine routine:

BlitzBasic: [AUSKLAPPEN]
Function spieler_springen()
;tasten abfrage
If KeyHit(key_rauf) Then
If sprung = False Then
sprung = True
sprung_y = player_sprung_hoehe
End If
End If

;sprung routine
If sprung = True Then
sprung_y = sprung_y - schwerkraft ; damit der char \"immer weniger springt\"
player_pos_y = player_pos_y - sprung_y ; spieler springen lassen

If sprung_y =< 0 Then
If col_unten = 1 Then
sprung = False
EndIf
End If
End If

;gravity
If sprung = False Then
If col_unten = 0 Then
sprung = True
sprung_y = 0
End If
End If
End Function


das prob is, meine figur bewegt sich einen schrift aufwärts... als würd ich einfachach player_pos_y - 6 rechnen... aber das is ja nich sin der angelegenheit.

vars:
col_unten // bei 0 ist unter dem spieler kein tile auf dem man landen kann
key_rauf // halt der scancode für pfeil hoch
player_sprung_hoehe // =6 soll angeben wie hoch der spieler max springen kann
schwerkraft // =0.33 wird von sprung_hoehe abgezogen damit der spieler "aufhört" zu springen
sprung_y // hier wird langsam sprung_hoehe runtergezählt = die bewegung die der sprung pro schleife macht.


hier zum komplettem code
http://www.blitz-pasting.de.vu...=tile2.rar


k dank hilfe von darkangel im chat gelöst
hatte was mit float zahlen zu tun... musste deklarieren... im tut machen die das zwar nich aber was solls so gehts.
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und
glaubte im Licht der Straßenlampe
Den Geist unseres jahrhunderts auf der
Straße zu sehen
Der uns sagte, daß wir alle am Rande
des Abgrunds stehen.
- Al Steward


Athlon 64 3000+ / Radeon 9600 / 1024mb ddram

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group