2D Shooter Vogelperspektive

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Raven_in_a_box

Betreff: 2D Shooter Vogelperspektive

BeitragFr, Okt 03, 2008 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, hallo erstmal^^
Ich habe ein kleines Problem mit meinem Game (Zombie- Vogelpespektiven-shooter-game). Also, ich hab schon ein testlevel von ZVSG, aber ich hab nun 2 Grundlegende Probleme

1)Meine Figur wird duch WASD und der Maus gesteuert. ich hätte natürlich gerne, dass sich meine Figur dorthin dreht, wo der Spieler mit der Maus hinzeigt

2)Ich will das Spiel nicht mit Tiles bauen, sondern ich habe ein riesiges Jpeg bild,, auf das ich dann Objekte setzte. Aber ich schffe es nicht die Kamera sozusagen auf den Spieler zu zentrieren., sodass er durch das riesige Areal gehen kann. Dazu wollte ich bis jetzt alles bewegen außer dem Spieler,das wäre aber etwas umständlich, geht es denn nicht einfacher?

MfG Ravenbox

Blackside

BeitragFr, Okt 03, 2008 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hey,

zu 1.) Du musst das Bild 360 mal laden und immer um 1° drehen(am besten weniger laden und mehr drehen) und in einen Dim speichern. um die Bewegung zu realisieren schau dir die winkelfunktionen sin und cos an( am besten schau dir das GTA steuerung tutorial bei www.robsite.de an.
Für die Mausdrehung schau dir mal ATan2 an Wink

zu 2.) wie du es vorhast wüsste ich nichts anderes, und meinst du nicht das, das so nen bischen zu rechenaufwämdig ist?
Hier sollte eigentlich eine Signatur stehen!

BladeRunner

Moderator

BeitragFr, Okt 03, 2008 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
360 Drehungen sind Quark, denn so genau guckt da eh keiner.. Alle 5 ° ein Schritt ist mehr als ausreichend und schont den Grakaspeicher.

Tiles wären sehr sinnvoll, raven. Du kannst natürlich statt des Players die Koordinaten des Hintergrundes ändern (wenn der Spieler nach rechts geht muss halt die x-Koordinate vom Hintergrund kleiner werden), aber du tust Dir und deiner Graka mit Riesenbildern keinen Gefallen. Unflexibel und ressourcenfressend.
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

Der_Schläfer

BeitragFr, Okt 03, 2008 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber ich schffe es nicht die Kamera sozusagen auf den Spieler zu zentrieren., sodass er durch das riesige Areal gehen kann. Dazu wollte ich bis jetzt alles bewegen außer dem Spieler,das wäre aber etwas umständlich, geht es denn nicht einfacher?


da gibt es doch noch diesen befehl, Origin, mit dem man den bildschirm-nullpunkt verschiebt...
 

Raven_in_a_box

Betreff: Juhu

BeitragSa, Okt 04, 2008 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, bis jetzt das hilfreichste und schnellste Forum, in dem ich war.

@BladeRunner:
Ist mir klar, dass es wirklich Ressourcenfressend ist, wenn man das alles lädt, aber nach meinen Tests muss ich sagen, es ist nicht wirklich schlimm, die Wartezeiten sind passabel und alles läuft flüssig, ich meine, ok, ich kann auch crysis flüssig zocken, weil ich einen verdammt schnellen Pc hab, aber ich habe es lieber, wenn relativ wenig Leute ein gutes und bugfreies Spiel von mir Spielen können, als wenn sehr viele Leute ein schlechtes Spiel spielen können*. Außerdem hat man beim Spiele programmieren noch einen Vorteil, da sich der Spieler wahrscheinlich ausschließlich auf das Spiel konzentriert, steht mir fast die ganze Power des Pc's zur verfügung.

@ Der_Schläfer
OMG DAAANKE, genau den Befehl such ich schon so lange...

*Ich bin unfähig, gute Tiles zu zeichen

Hier ist jetzt übrigens noch der 360° Code, den Bladerunner verurteilt Wink
Mein eigentliches Problem ist aber, dass er sich eben ned um 360° Grad dreht
Als auto.bmp hab ich ein rotes Quadrat von 40x40 genommen.

Code: [AUSKLAPPEN]
 
Dim Auto(359)

TFormFilter 0

x#=100
y#=100

For Winkel# = 0 To 359

      Auto(Winkel#)=LoadImage("auto.bmp")
      MidHandle Auto(Winkel#)
      RotateImage auto(Winkel#),Winkel#
      MaskImage Auto(Winkel#),255,0,255

Next

SetBuffer BackBuffer()


While Not KeyHit(1)
Winkel# = (ATan2(MouseX(), MouseY()) + 90) Mod 360
DrawImage Auto(Winkel#), x#,y#
Line x#,y#,MouseX(),MouseY()
Flip
Cls
Wend

End


Also das Problem liegt wahrscheinlich bei "Winkel# = (ATan2(MouseX(), MouseY()) + 90) Mod 360", aber ich finde den richtigen Dreh nicht.
Die Zeile "Line x#,y#,MouseX(),MouseY()" ist nur dazu da, um mein Problem deutlischer zu machen und um zu sehen von wo er dreht (hat sich dann mit MidHandle geklärt).

Thx schonmal im vorraus...Raven_in_a_box

Xeres

Moderator

BeitragSa, Okt 04, 2008 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Atan2 erwartet die Parameter umgekehrt als meistens benutzt: Y/X, außerdem brauchst du eine Start und eine Ziel Koordinate. Wenn ich mich nicht vertan habe, sollte es so funktionieren:
Winkel# = ATan2(ZielY - StartY, ZielX - StartX)
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Raven_in_a_box

Betreff: Juhu

BeitragSo, Okt 05, 2008 12:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok endlich, ich habs...

Code: [AUSKLAPPEN]

Graphics 1024,768,32,1
Dim Auto(359)

TFormFilter 0 ;<---frag nicht, ist so ein unnötiger befehl wie setbuffer, den man braucht
HidePointer
x#=500;<---x und y koordinaten von spieler
y#=500

thex=(MouseX()-x#);<---experiment (unwichtig)
they=(MouseY()-y#);<---

level=LoadImage("graphics/level1.jpg")
Text 500,500, "done"

For Winkel# = 0 To 359

      Auto(Winkel#)=LoadImage("graphics/auto.bmp")   ;<--------360 Grad drehen ist egal, schff ich schon
     MidHandle Auto(Winkel#)
      RotateImage auto(Winkel#),Winkel#
      MaskImage Auto(Winkel#),0,0,0

Next

SetBuffer BackBuffer()


While Not KeyHit(1)
Winkel# = (ATan2(MouseY()-y#, MouseX()-x#) + 361) Mod 360 ;<----360 Gard drehung unwichtig, mach ich schon

Text 1000,1000, Winkel#
DrawImage level,0,0
DrawImage Auto(Winkel#), x#,y#
DrawImage Auto(1),300,300
Line x#,y#,MouseX(),MouseY()

;Text x#,200,200
;Text y#,200,230d
;Text one,200,250
Text two,x#,y#;<----degub Text, ist komisch, two verhält sich gay
If MouseHit(1) Then
DrawImage Auto(1),MouseX(),MouseY();<----nur ein test, ob man sozusagen schießen kann
End If

If KeyDown(17) Then
y#=y#-4
End If

If KeyDown(31) Then ;<-----Steuerung
y#=y#+4
End If

If KeyDown(32) Then
x#=x#+4
End If

If KeyDown(30) Then
x#=x#-4
End If

one=-x#+512
two=-y#+384
Origin one,two
;Der orogin Befehl versetzt den nullpunkt des bildschirms, man kann also schon über den bidschirm hinaus Wandern, aber die
;Maus geht ned weiter als 1024,768(oder so halt)
Flip
Cls
Wend

End


Das ist mal der gesamte code, den ich bisher habe, nur falls ihn jemand betrachten will.
Ich kann ihn jetzt drehen...
Code: [AUSKLAPPEN]

Winkel# = (ATan2(MouseY()-y#, MouseX()-x#) + 361) Mod 360

Jetzt hab ich aber leider noch EIN anderes Problem, ich hab eh alles kommentiert für einen freund, der aber auch ned weiter weiß. Unten im Code hab ich den Origin Befehl eingebaut, aber es funktioniert ned richtig. Es gab hier schonmal so ein Thema aber es wurde nie richtig gelöst, Origin hat auswirkungen auf die Maus...bei mir zumindest, aber ich hab version 1.86 , ich lad mir mal die neue runter und scha, ob sich da was geändert hat, weil bei meiner Version verschiebt er mit Origin zwar brav den Nullpunkt, aber die Maus läuft noch mit den Original Koordinaten, ich kann also nicht über pixel x=1024 und y=768 hinaus, irgendwelche vorschläge, ich edite einfach wenns mit der neuen 1.99 funzt.
Thx schonmal im Vorraus

Raven_in_a_box

Blackside

BeitragSo, Okt 05, 2008 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey,
Du kannst doch einfach die Mauskodinaten umrechnen....
Sprich gucken ob der "Origin" kleiner oder größer als der "Nullpunkt" ist
und dann entsprechend die "Verschiebung" zu den Maukoordinaten addieren/subtrahieren(am besten MouseX und Mousey am anfang in eine Variable speichern)
MFG Blackside
Hier sollte eigentlich eine Signatur stehen!
 

Raven_in_a_box

BeitragMo, Okt 06, 2008 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke an alle, hab jetzt sozusagen die "Engine" (nenne sie Birdwatch Engine) fertig, man kann laufen,schießen, halt alles, was man können muss und das Laden dauert max 10 Sekunden. Es wird in ersichtlicher Zeit fertig sein, vorraussichtlich November oder Dezember 2008.

ok...edit
die kollission fehlt noch, kommentare und hilfe (wie?) dazu?

Raven_in_a_box
 

da_poller

BeitragMo, Okt 06, 2008 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
du könntest die konturen über rechtecke und dreiecke annähern und auf kollision prüfen..

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group