2D Shooter

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Thoth

Betreff: 2D Shooter

BeitragDi, März 22, 2005 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte heute mal probiern einen das grundgerüst für einen shooter zu programmieren:

Graphics 800,600,16,2
SetBuffer BackBuffer()

Global spielerjet, spieler_links, spieler_rechts, X, Y
Repeat

X = 200
Y = 200

spielerjet = LoadImage ("gfx/spieler_jet.bmp")
DrawImage spielerjet, X, Y

spieler_links = GetKey()
spieler_rechts = GetKey()

If spieler_links = 203 Then
X = X - 1
EndIf

If spieler_rechts = 205 Then
X = X + 1
EndIf

If KeyDown(1) Then ende = 1
Flip
Until ende = 1

Ähm.. er bewegt das Raumschiff einfach nicht..
 

David

BeitragDi, März 22, 2005 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

BlitzBasic: [AUSKLAPPEN]

spieler_links = GetKey()
spieler_rechts = GetKey()


Vorzugsweise nur eine Variable verwenden! Wink

grüße

diGGa

GruppenKaspar

BeitragDi, März 22, 2005 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Repeat

X = 200
Y = 200





am anfang der schleife setzt du die variablen jedesmal zurück...
übrigens lädst du auch in der schleife das bild... du lädst es immer und immer wieder...
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
 

Thoth

BeitragDi, März 22, 2005 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, hab eure Tipps beachtet, dennoch:
BlitzBasic: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

Global spielerjet, spieler_bewegung, X

X = 200
spielerjet = LoadImage (\"gfx/spieler_jet.bmp\")
DrawImage spielerjet, X, 200
Repeat

If spieler_bewegung = 2 Then
X = X - 1
ElseIf spieler_bewegung = 3 Then
X = X + 1
EndIf

If KeyDown(1) Then ende = 1
Flip
Until ende = 1

..leider bewegt es sich immernoch nicht.. eigentlich sollte man mit 1 das bild nach links versetzen können, und mit 2 nach rechts..

MfG Thoth

Kryan

BeitragDi, März 22, 2005 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
getkey gibt den ascii-wert und nicht den scancode wieder

einfach das verwenden:
spieler_links=KeyDown(203)
spieler_rechts=KeyDown(205)
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
  • Zuletzt bearbeitet von Kryan am Di, März 22, 2005 21:07, insgesamt einmal bearbeitet

diGGa

GruppenKaspar

BeitragDi, März 22, 2005 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]



Graphics 800,600,16,2
SetBuffer BackBuffer()

Global spielerjet, spieler_bewegung, X
X = 200
spielerjet = LoadImage (\"gfx/spieler_jet.bmp\")

Repeat
Cls

DrawImage spielerjet, X, 200

If spieler_bewegung = 2 Then
X = X - 1
ElseIf spieler_bewegung = 3 Then
X = X + 1
EndIf

If KeyDown(1) Then ende = 1
Flip
Until ende = 1



das bild musst du ausserhalb der schleife laden aber schon innerhalb zeichnen wenn du das nicht machst dann sieht mans ja nur einmal

mit cls löschst du den bildschirm und dadurch wird das ding dann auch bewegt
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
 

Thoth

BeitragDi, März 22, 2005 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
tut mir leid dass ich nerve aber... hab alles berügsiuchtigt was ihr mir gesagt habt (hoff ich mal) aber es gibt keine veränderung:

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Global spielerjet, spieler_links, spieler_rechts, X
spieler_links = GetKey()
spieler_rechts = GetKey()

X = 200

spielerjet = LoadImage (\"gfx/spieler_jet.bmp\")

;hauptschleife
Repeat

DrawImage spielerjet, X, 200

If spieler_links = 203 Then
X = X - 1
ElseIf spieler_rechts = 205 Then
X = X + 1
EndIf

If KeyDown(1) Then ende = 1
Flip
Until ende = 1


MfG
 

Gerhard

BeitragDi, März 22, 2005 21:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast getkey ausserhalb der Hauptschleife. Wie soll dein Programm erfahren, welche Taste du drückst?
 

Thoth

BeitragDi, März 22, 2005 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Oje.. ich werd noch wahnsinnig Very Happy
BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,16,2
SetBuffer BackBuffer()

Global spielerjet, spieler_links, spieler_rechts, X

X = 200

spielerjet = LoadImage (\"gfx/spieler_jet.bmp\")

;hauptschleife
Repeat
spieler_links = GetKey()
spieler_rechts = GetKey()

DrawImage spielerjet, X, 200

If spieler_links = 203 Then
X = X - 1
ElseIf spieler_rechts = 205 Then
X = X + 1
EndIf

If KeyDown(1) Then ende = 1
Flip
Until ende = 1

Leider immernoch keine veränderung Crying or Very sad

Thoth
 

Gerhard

BeitragDi, März 22, 2005 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Machs doch wie oben vorgeschlagen:

if keyhit(203) then x=x-1
if keyhit(....

getkey setzt immer wieder deine Variable auf Null. Das musst du anders lösen.
  • Zuletzt bearbeitet von Gerhard am Di, März 22, 2005 21:25, insgesamt einmal bearbeitet

Kryan

BeitragDi, März 22, 2005 21:25
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn dann, aber auch wirklich wie ich geschrieben habe: mit KEYDOWN
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!
 

Gerhard

BeitragDi, März 22, 2005 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
einverstanden.
 

Thoth

BeitragDi, März 22, 2005 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Juuhuuuuu ! Very Happy

Ihr seid super, B!G ThX !!!

MfG
 

Thoth

BeitragMi, März 23, 2005 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab schon wieder ein Problem, ich habe versucht einen Schuss vor dem Schiff erscheinen zu lassen, der dann nach oben wandert:

BlitzBasic: [AUSKLAPPEN]

AppTitle \"2D SpaceRoom v0.01 Alpha\"
Graphics 800,600,16,2
SetBuffer BackBuffer()

Global spielerjet, X, Y, schussbild, schussY

X = 200
Y = 500

schussY = Y

schussbild = LoadImage (\"gfx/schuss.jpg\")
spielerjet = LoadImage (\"gfx/spieler_jet.bmp\")

;hauptschleife
Repeat
Cls
ResizeImage spielerjet,100,75
DrawImage spielerjet, X, Y

If KeyDown(203) Then
X = X - 10
ElseIf KeyDown(205) Then
X = X + 10
EndIf

schussX = X

If KeyDown(30) Then
For I 1 To 100
DrawImage schussbild, 200, schussY - 10
Cls
Next
EndIf

If KeyDown(1) Then ende = 1
Flip
Until ende = 1


.. es geht nicht: Fehlermeldung: Expecting variable assignment...

Thoth

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, März 23, 2005 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier Sad
BlitzBasic: [AUSKLAPPEN]
  For I 1 To 100 
Richtig
For I = 1 To 100


das BlitzBasic: [AUSKLAPPEN]

ResizeImage spielerjet,100,75
vor die repeat schleife
[BB2D | BB3D | BB+]
 

Gerhard

BeitragMi, März 23, 2005 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Resizeimage in der Hauptschleife?
100 mal das Schussbild an der gleichen Stelle zeichnen und löschen?

Willst du das wirklich?
 

Thoth

BeitragMi, März 23, 2005 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja... wollte ich nicht wirklich... ^^ @gerhard

Ich habs gemacht aber da ist ja das problem, das am anfang der hauptschleife ja jedesmal cls kommt, der schuss verschwindet dann auch jedesmal wieder... außerdem bewegt er sich leider immer noch nicht Sad:

BlitzBasic: [AUSKLAPPEN]

AppTitle \"2D SpaceRoom v0.01 Alpha\"
Graphics 800,600,16,2
SetBuffer BackBuffer()

Global spielerjet, X, Y, schussbild, schussY, schussX

X = 200
Y = 500

schussbild = LoadImage (\"gfx/schuss.jpg\")
spielerjet = LoadImage (\"gfx/spieler_jet.bmp\")
ResizeImage spielerjet,100,75

;hauptschleife
Repeat
Cls
DrawImage spielerjet, X, Y

schussY = Y
schussX = X

If KeyHit(30) Then
For I = 1 To 100
DrawImage schussbild, schussX, schussY - 10
Next
EndIf

If KeyDown(203) Then
X = X - 10
ElseIf KeyDown(205) Then
X = X + 10
EndIf

If KeyDown(1) Then ende = 1
Flip
Until ende = 1



MfG
 

Gerhard

BeitragMi, März 23, 2005 21:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Prinzip könntest du bei einem Schuss folgendes machen:

If keyhit(30) then geschossen = 1 : schussX = X : schussY = Y

If geschossen = 1 then
Drawimage schuss,schussX,schussY
schussY = schussY -10
if schussY < 0 then geschossen = 0
endif
 

Thoth

BeitragMi, März 23, 2005 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ich habs jetzt so:

BlitzBasic: [AUSKLAPPEN]

If KeyHit(30) Then
For I = 1 To 100
DrawImage schussbild, schussX + 0.25, schussY - 25.5
schussY = schussY - 150
Next
EndIf


Smile geht auch einigermaßen, bloß dass es .. wie soll man sagen: keine flüssige bewegung ist... im abstand von 1 cm sieht man überall das schussbild und dann is er weg...

Thoth
 

Gerhard

BeitragMi, März 23, 2005 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
So malst du alle Schussbilder in einem einzigen Durchlauf deiner Hauptschleife. Da kann sich nix bewegen.

Du musst in jedem Durchlauf der Hauptschleife ein leicht verschobenes Schussbild zeichnen.

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group