Player soll schießen können
Übersicht

DarthshootBetreff: Player soll schießen können |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo!
Also erstmal schön hier zu sein ![]() Da ich schon länger mit dem Gedanken gespielt habe, Spiele zu programmieren, habe ich mir auch schon überlegt wie das erste Game aussehen sollte. Am besten das einfachste überhaupt zur Übung und so. Ein 1D (von oben wenn ich mich net irre) Raumschiffshooter wie Chickeninvaders. Bis jetzt habe ich ein Bild, dass ich mit den Pfeilen bewegen kann, das aber nicht über den Bildschirmrand hinaus kann. Mein eigendliches Problem ist das Schießen. Es muss irgendwie möglich sein, ein neues Bild zu erstellen, wenn die Leertaste gedrückt wird, dass dann einfach gerade hoch "läuft". Ich komm aber irgendwie nicht mit dem Buffering zurecht. Im Moment ist es so, dass er in einer Sekunde einfach nur kurz bis zum oberen Bildschirmrand lauter Bilder im Abstand von 5 Pixeln setzt, die alle sofort wieder verschwinden. (Ich nehme an nach einem Buffersflip oder so.) Hier mal der Code: (Hab probiert das ganze mit GoSub zu machen) Code: [AUSKLAPPEN] ; Standart-Schuss von Player1 If KeyHit(57) Then Gosub SchussBlock EndIf .SchussBlock Schuss1 = LoadImage("Schuss1.bmp") XS = X + 24 YS = Y - 5 Repeat YS = YS - 25 DrawBlock Schuss1, XS, YS Until YS <= 0 Return X und Y sind die Koordinaten vom Player. Ich muss diese leicht modifizieren, damit der Schuss auch in der spitze mit dem Lasergewehr startet. Wie geht das was ich vorhab? Ich glaub ich bin total falsch rangegangen, oder? ![]() Danke im Voraus. MfG Darthshoot |
||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Abfrage für den Tastendruck muss mit in die Schleife, weil sonst nur davor kurz überprüft wird. | ||
Todeskop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
du muss dafür (um deinen player schießen beizubringen) ne komplette function machen....
les dir das demo bsp im ordner: Blitz3D\Samples\Blitz 3D Samples\Open DNA\Artic Runner durch dann verstehste dat vielleicht... |
||
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ehm ja danke erstmal für die Antworten. Ich verstehe allerdings den Grund nicht so recht, warum die Tastenabfrage mit in die Schleife soll? Die Schleife soll ja nur ausgeführt werden, wenn die Taste gedrückt wurde.
Ich bin noch ein totaler Anfänger; das Beispiel hat mir leider nicht richtig weitergeholfen :/ Hab schon einige Games und Sources im Internet durchstöbert.. aber auch noch nichts richtiges gefunden. Im Grunde muss ja erstmal nur ein Bild einfach gerade nach vorne "gehen". |
||
![]() |
NightPhoenix |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erstmal herzlich willkommen in unserer Community! ![]() 1D Spiele gibts nicht ![]() solche spiele sind nicht 1D sondern 2D ![]() 1D=1Dimensional= 1 Achse... kann ich mir grade irgend wie nicht vorstellen ![]() Bei 2D hast du also 2 Achsen wie im Matheunterricht Sek.1 beim Koordinatensystem (x und y) bei 3D hast du 3 Achsen (x,y,z) bei 4D gibts dann noch die Zeit... so sagt man, ist aber für programmieren völlig irrelevant x = rechts links y = hoch runter z = vor zurück (in Tiefe) MfG. |
||
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ehm ja stimmt ^^ aber was ist denn jetzt mit den Schüssen? Ich hab jetzt auch endlich mal ein anderes Raumschiffshooter Game gefunden, aber da ist alles viel zu kompliziert für mich. Ist es nicht irgendwie leicht möglich einen Schuss zu programmieren? ![]() |
||
Todeskop |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
mach erst ma die anfangs-turtrail usw....
gibt gute in www.robseite.de oder www.blitztbase.de ohh gemerkt das du 2d willst.... ![]() ![]() geht aber fast genauso.... |
||
snörkl |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
2. seite tutsection von bb --> weltraumshootertutorial.
Gut verständlich. Bitte lern aber erst wie gesagt wurde die basics und programmiere dann erst mal was ganz simples. Ansonsten macht man die schüsse mit typs. Ungefähr so, ist ausm kopf geschrieben: Code: [AUSKLAPPEN] type schuss
field x,y end type repeat if keyhit(57) s.schuss=new schuss schuss\x=playerx schuss\y=playery endif for schuss=each schuss schuss\y=schuss\y - 3 drawimage schussimage,schuss\x,schuss\y if schuss\y<1 then delete schuss next until keyhit(1) end Bitte kopiere diesen code nicht einfach in dein spiel, du solltest erst verstehen was er überhaupt macht. Mach also auf z.B. robsite.de type-tuts, das beginner tut usw. |
||
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok vielen Dank für die Hilfe. Wenn ich nicht weiter komm, melde ich mich nochmal.
EDIT: Also ich hab jetzt noch ein paar Probleme. Den Beispielcode habe ich soweit komplett verstanden. Wenn ich ihn jetzt außerhalb des Buffers hinpacke, meint er, dass Type eine Variable sein muss. Wenn ich ihn innerhalb des BufferFlip Dings hinpacke, wo auch der Spieler gerendert wird, dann meint er, man könnte das nur im Mainteil des Programms verwenden. So sieht es bis jetzt aus: Code: [AUSKLAPPEN] ; Standart-Schuss von Player1
Schuss1 = LoadImage("Schuss1.bmp") XS = X + 24 YS = Y - 5 Type Schuss Field XS, YS End Type If KeyHit(57) Then S.Schuss = New Schuss Schuss \ XS = X Schuss \ YS = Y EndIf For Schuss = Each Schuss Schuss \ YS = Schuss \ YS - 3 DrawImage Schuss1, Schuss \ XS, Schuss \ YS If Schuss \ y <= 0 Then Delete Schuss Next X und Y stellen wie immer die Koordinaten vom Player da und XS bzw. YS die Koordinaten vom Schuss. Was ist jetzt noch falsch? Sorry das ich so nerve, aber mir ist es wichtig schonmal wenigstens die Base für mein kleines Shootergame hinzubekommen ![]() |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ich wolte mal eben off topic fragen
NightPhoenix Die 4Dimenson ist doch nicht die Zeit soweit ich weis ist die 4Dimension die die mension die nicht von den anderen 3 angesprochen werden kann also z.b. die dimenson deren achse auf alle 3 andren senkrecht zeigt ohnen gekrümt zu sein hört sich unmöglich an aber es ist möglich aber egal ich wolte es nur mal loswerden (unser Mathe lehrer meite das auch mit der zeit aber die Mathematiik sagt was anderes ) |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, wenn ihr im sagt, dass er erst die Grundlagen lernen soll, ist es doch nicht so sinnvoll ihm gleich Types als Lösungsansatz zu präsentieren.
Die Abfrage muss in die Schleife, damit bei jedem Schleifendurchgang abgefragt wird, ob ein Tastendruck vorliegt. Wenn du erst nach dem tastendruck diese Schleife beginnen lässt, muss das auch als Bedingung machen, also If Tastendruck = 1 Then Gehe Schleife durch... blablabla EndIf Doch dies an sich muss wegen den oben genannten Gründen auch in eine Schleife. Doch hier einfach erstmal ein einfaches Beispiel. Graphics 640, 480, 16, 2 Setbuffer Backbuffer() objekt = LoadImage("objekt.bmp") Repeat Cls DrawImage objekt, x, y If KeyDown(57) Then Y = Y + 1 EndIf Flip Until KeyHit(1) End Das ist der erste Schritt. Du willst aber nicht nur 1 Torpedo abschießen, sondern bestimmt eine ganze Menge. Dies lässt sich erstmal gut mit Feldern lösen. also erstellst du es vor der Hauptschleife: Dim torpedo(10, 3) ; die beiden Zahlen fragst du in einer For ... Next Schleife ab: Code: [AUSKLAPPEN] For I = 1 To 10
If KeyDown(57) Then torpedo(I, 1) = 1 ; der Zustand wird auf 1, True gesetzt, abschuss torpedo(I, 2) = x + 10 ; 2 sind die x werte torpedo(I, 3) = y - 10 ; 3 sind die y werte EndIf If torpedo(I, 1) = 1 Then ; Wenn der Zustand True ist wird sie nach vorne bewegt torpedo(I, 3) = torpedo(I, 3) + 2 ;dafür die werden die y werte addiert EndIf Next Schau dir dafür einfach mal Dim-Felder an! |
||
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank! Das hat mich wirklich weiter gebracht. Jetzt weiß ich auch wofür Mehrdimensionale Arrays gut sind. ![]() Es ging alles viel besser als ich gedacht hätte! Nur noch ein Problem: Ich kann trotz allem nur einen Schuss abgeben. Wenn ich einen zweiten abgeben will, wird der erste "zerstört" und sozusagen als zweiter neu gestartet. Woran liegt das? Ich weiß nicht ob ich dafür Code zeigen muss, denn im Grunde habe ich nichts großes verändert, außer ein Code: [AUSKLAPPEN] DrawBlock Schuss1, Schuss(I, 2), Schuss(I, 3)
zwischen Code: [AUSKLAPPEN] Schuss(I, 3) = Schuss(I, 3) - 7
DrawBlock Schuss1, Schuss(I, 2), Schuss(I, 3) EndIf gesetzt. Damit der Schuss auch gerendert wird ![]() Code: [AUSKLAPPEN] ; Standart-Schuss von Player1 Dim Schuss(10, 3) Schuss1 = LoadImage("Schuss1.bmp") ; Initialisiere Bufferschleife Repeat Cls ; Schuss1 aktivieren XS = X + 24 YS = Y - 5 For I = 1 To 10 If KeyDown(57) Then Schuss(I, 1) = 1 Schuss(I, 2) = XS Schuss(I, 3) = YS EndIf If Schuss(I, 1) = 1 Then Schuss(I, 1) = 1 Schuss(I, 3) = Schuss(I, 3) - 7 DrawBlock Schuss1, Schuss(I, 2), Schuss(I, 3) EndIf Next ; Render Player1 Player1 = LoadImage("Player1.bmp") MaskImage Player1, 255, 0, 255 DrawImage Player1, X, Y Flip Until KeyHit(1) Woran liegts? P.S. Ich hab den Player1 mitgepostet, weil ich mal fragen wollte, ob man das LoadImage nicht über die Bufferschleife anbringen kann? EDIT: Hab gerade die For Schleife entfernt und sah, dass es keinen Effekt hatte. Das bedeutet die Schleife tut nicht das was sie soll. Aber so weit bin ich noch nicht in BB, dass ich so einen Fehler erkennen könnte. Werde mich auf jedenfall weiter dahinter setzen, aber wenn ihr mir das sagen könntet wär ich total dankbar ![]() EDIT2: Ehm halt. Ich wollte einen Schuss pro Drücken haben. Also KeyHit und nicht KeyDown. Das Problem besteht aber weiterhin. |
||
![]() |
Hagbard |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, kein wunder, wenn du
Drawimage schuss1, schuss(I, 2), schuss(I, 3) schreibst. Hier zeichnest du ja nur den schuss eins... Du musst schuss(I, 1) zeichnen... |
||
Darthshoot |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
schuss(I, 1) hat nur den Wert 1. Da gibts nicht viel zu zeichnen. Oder hab ich das nur falsch verstanden?
EDIT: Also ich hab jetzt schon sehr viel rumprobiert und ich glaube es handelt sich hier einfach nur um einen Denkfehler. Ich hab ja nur EINEN Schuss, der in der Variable Schuss1 gespeichert ist. Ich kann also garnicht unendlich viele Schüsse abgeben, wenn ich nur einen einzigen habe. Aber wie geht das denn jetzt was ich will? ![]() EDIT: ICH HABS JUHU!!! ![]() Code: [AUSKLAPPEN] ; Standart-Schuss von Player1
Dim SchussB(20, 3) For S = 1 To 20 SchussB(S, 1) = LoadImage("Schuss1.bmp") Next Dim Schuss(20, 3) I = 0 ... ; Initialisiere Bufferschleife Repeat Cls ... ; Schuss1 aktivieren If KeyHit(57) Then PlaySound(Schuss1Sound) If I = 20 Then I = 0 I = I + 1 Schuss(I, 1) = 1 Schuss(I, 2) = X + 24 Schuss(I, 3) = Y - 5 EndIf For T = 1 To 20 If Schuss(T, 1) = 1 Then Schuss(T, 3) = Schuss(T, 3) - 8 DrawBlock SchussB(T, 1), Schuss(T, 2), Schuss(T, 3) EndIf Next |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group