Hindernisse?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Surat

Betreff: Hindernisse?

BeitragDi, Apr 05, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich wollte eigentlich ein Hinderniss für ein 2D-Spiel programmieren,
doch irgendwie weiß ich nicht, wie ich das anstellen solle.

Also, ein dicker Stein soll die Spielfigur am weitergehen hindern.

BlitzBasic: [AUSKLAPPEN]

If ImagesCollide(spieler,X,Y,0,stein,s,t,0) Then ...


Und dann?
Vielleicht so?
Code: [AUSKLAPPEN]

Then
X<s
Y<t
EndIf


Kann mir irgendjemand dabei helfen?
Ich bin für jede Hilfe dankbar! Wink
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)

matte

BeitragDi, Apr 05, 2005 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo

Wenn der Spieler mit dem Stein zusammenkracht, musst du den Spieler wieder auf die Position vor der Kollision setzen.

z.B.
Code: [AUSKLAPPEN]
...then
  x=x-xdiff
  y=y-ydiff
endif


je nachdem, wo der Spieler her kam...

Hubsi

BeitragDi, Apr 05, 2005 20:27
Antworten mit Zitat
Benutzer-Profile anzeigen
So könnte man das lösen:BlitzBasic: [AUSKLAPPEN]
; Pseudo:
oldx=x
oldy=y
If ImagesCollide(...)
x=oldx
y=oldy
EndIf
Einfach in jedem Durchlauf die alten Positionen zwischenspeichern und bei Kollision zurücksetzen Very Happy

Edit: Nächstes Mal bin ich schneller, versprochen Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Surat

BeitragDi, Apr 05, 2005 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, vielen Dank, aber das mit dem oldx und oldy funktioniert irgendwie
nicht. Außer ich schreibe am Anfang:
oldx=x-1
oder mache ich da was falsch?
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)

Hubsi

BeitragDi, Apr 05, 2005 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, hab was vergessen. Du musst natürlich vor dem verändern der Koordinaten zwischenspeichern, dann bewegen und schliesslich Kolli prüfen. So sollte es dann keine Probs geben Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

hitokiri

BeitragMi, Apr 06, 2005 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
wenns nur ein 2d spiel ist und es nur um steine geht würde es ja auch ein rectoverlap tun bzw wenn es ein top down spiel ist einfach nur X koordinate.

Ornos

BeitragMi, Apr 06, 2005 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
kenn mich bei 2d nicht aus aber gibt es da nicht auch so was wie kollisonsabfragen?

edit: klar gibs das, habe das nur von matte gelesen
  • Zuletzt bearbeitet von Ornos am Mi, Apr 06, 2005 11:55, insgesamt einmal bearbeitet

Jan_

Ehemaliger Admin

BeitragMi, Apr 06, 2005 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Deviniere erstmal dein Spiel, weil darauf, man die Antwort, welche Kollision sich lohnt, aufbauen kann.
between angels and insects

Surat

BeitragMi, Apr 06, 2005 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, das Spiel ist so ähnlich wie Zelda(auf GB,GBC und GBA).
Der Stein ist ein Hinderniss und deswegen darf die Spielfigur nicht
durch ihn durchrennen. Das gilt für x als auch für y.
Ich weiß nur nicht genau wie ich das machen soll bzw. den
X-oder Y-Wert vorher zwischenzuspeichern. Crying or Very sad
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)

Jan_

Ehemaliger Admin

BeitragMi, Apr 06, 2005 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
ziehe dir mal den Mapeditor, von TS bei www.Mapeditor.de.vu

Da ist ein RPG Sample drinne, auf das du aufbauen kannst. (Eigenwerbung)
between angels and insects
 

hitokiri

BeitragMi, Apr 06, 2005 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn es wie Zelda ist, also SNES zelda, dann ist es doch 2D topdown, also brauchst du ja an y nicht wirklich überprüfen, weil alle Hindernisse sozusagen y= 1 haben und der rest eben y=0. Demnach langt ein einfaches rectaloverlap mit einem rectal mit einer höhe von 1

Surat

BeitragMi, Apr 06, 2005 13:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Du meinst Rectsoverlap,oder?
Da eignet sich ImagesCollide doch eigentlich besser, da der Stein ja
nicht viereckig ist.
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)

Surat

BeitragMi, Apr 06, 2005 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach, ja. Wie kann ich koordinaten zwischenspeichern?
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)
 

hitokiri

BeitragMi, Apr 06, 2005 14:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hm....imagesoverlap ist allerdings sehr viel langsamer als rectsoverlap. oder du schreibst einfach selber was schnelles wenn du die "werte" von stein und spieler kennst.
also machst eben erst ein rectsoverlap und, wenn die rects overlappen, erst dann eine imagecollide überprüfung. wenn er ansonsten für jedes steinbild ne exakte abfrage macht...da kommt selbst ein 2D spiel mal ins ruckeln auf nem langsamen rechner.
Koordinaten zwischenspeichern indem du sie in einer variable ablegst.
also wie er es eigentlich schon gesagt hatte:
bevor die tastaturabfrage machst schreibst du:
oldx=x
oldy=y

dann x=x+step
dann y=y+step

dann die kollisionsüberprüfung
if kollision dann
x=oldx
y=oldy

Smile


gerade noch eingefallen.....hast du 8 bewegungsrichtungen oder 4 ?
wenn du nur 4 hast kannst du einfach mit nem line command die abfrage machen. also eine linie von 1 oder 5 oder wie gross auch immer dein step sein mag vom player in die 4 bewegungsrichtungen zeichnen und sehen ob dort irgendwas in der entfernung y grösser als 1 hat. ist wohl das allerschnellste

Hubsi

BeitragMi, Apr 06, 2005 16:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass Dich nicht verwirren, Deiner Frage nach bist Du noch fleissig am lernen und da über selbstgebastelte Kollisionsroutinen nachzudenken wird Dich nicht sehr motivieren Wink Bleib bei ImagesCollide oder was Du gerade verwenden wolltest und sieh Dir das Beispiel an:BlitzBasic: [AUSKLAPPEN]
oldx=x
oldy=y
If KeyDown(bla)
x=x+tralala
EndIf
; same shit for y
If kolli
x=oldx
y=oldy
EndIf
Ein ImagesCollide mehr wirst Du nicht merken und es motiviert wenn man erstmal was auf die Beine getsellt hat Very Happy Es ist grundsätzlich richtig den Code von der ersten Zeile an zu optimieren, aber bei den ersten Schritten muss man es nicht gleich übertreiben. Die Erfahrung machts Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

hitokiri

BeitragMi, Apr 06, 2005 16:48
Antworten mit Zitat
Benutzer-Profile anzeigen
naja....ich dachte halt wenn er ein zeldastil spiel macht dann hat er seine informationen über die steine in ner map drinnen stehen. dann macht er bei der mapinformation eben anstatt dim (x,y) dim (x,y,z)
wobei bei top down ansicht z eben die "höhe" angibt. da könnte er dann einfach immer x+/- und y+/- geschwindigkeit des laufens machen und in der map prüfen ob bei den dazugehörigen werden ein z steht.

matte

BeitragDo, Apr 07, 2005 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn das wirklich ein Spiel ähnlich Zelda werden soll, dann hast du doch immer Hintergrund so eine Art Tile-Engine laufen. Die Map ist also in viele kleine Rechtecke, oder Hexagons aufgeteilt. Erklär die Hindernisfelder zum verbotenen Feld. Überprüfe bei jedem Schritt, ob der nächste Zug in ein verbotenes Feld führt. Ist dem so, dann setz die Figur nicht.
Ohne Tile Engine würde ich um die Hindernisse Kreise setzten und Kollsion auf Abstand prüfen.

BlitzBasic: [AUSKLAPPEN]
If (spielerx-steinx)^2+(spielery-steiny)^2<Abstand^2 Then 
;Hier Collisonsbehandlung
NormalWinkel=ATan2(spielery-steiny,steinx-spielerx) Mod 360
;jetzt spieler in entgegengesetzte Richtung zurücksetzen
spielerx=spielerx+Faktor*Cos(NormalWinkel+180)
spielery=spielery-Faktor*Sin(NormalWinkel+180)
;mit Faktor bestimmst du wie weit deine Figur zurückgesetzt wird
EndIf


Jetzt ist es egal aus welcher Richtung du gegen das Objekt gelaufen bist. Das ist also eine simple, selbstprogrammierte Koll-.routine

grüße
matte
 

hitokiri

BeitragDo, Apr 07, 2005 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke matte, das ist genau das, was ich eigentlich sagen wollte jedoch nicht auszudrücken vermochte Rolling Eyes

Surat

BeitragFr, Apr 08, 2005 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank,
eigentlich hatte ich einen Hintergrund,der nicht aus Tiles bestand,
doch irgendwie ist das alles mit Tiles einfacher.
"DER GRÖßTE FEIND IST IN DEN EIGENEN REIHEN" (Trygonia-Xen's Quest)

AZUON-Beyond the dark life (2%)
SOULS OF DESTINY (23%)
 

feider

ehemals "Decelion"

BeitragFr, Apr 08, 2005 19:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Deshalb nimmt man ja tiles Wink

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group