Verstehensproblem Schießen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Freeman

Betreff: Verstehensproblem Schießen

BeitragMi, Dez 17, 2003 22:38
Antworten mit Zitat
Benutzer-Profile anzeigen
ja, also ich habe ein Verstehensproblem beim schießen. Es ist ja so, bei jedem Code der mir unter die nase kommt nutzen die Coder immer nur einen Sprite für das Schießen, diese werden dann anhand von Variablen bewegt, das is mir alles noch klar. Aber sie sind in der Lage mit diesem einem Sprite so viele Schüsse abzufeuern wie sie wollen Rolling Eyes. und genau an der Stelle liegt mein problem,Wie ist es möglich diesen einen sprite zu vervielfachen? Anders könnt ich mir das auch nicht vorstellen, bitte klärt mich auf ^^

Triton

BeitragMi, Dez 17, 2003 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie handhabst du es denn bei einem Schuss?

Richtig, der hat mehrere Variablen (etwa x,y,speed) und nach denen ändert sich die Position.

Da es etwas mühsam wäre x2,y2,speed2, 3,4, ... per Hand zu erstellen gibt es eine Wundererfindung die sich Array nennt, damit hast du praktisch
eine variable, die aber mehrere Zähler hat.

Alternativ gibts auch noch Types, für Anfänger sind die aber erstmal schwerer zu verstehen. Und die sind auch kein Muss um vorranzukommen Smile


Schau dir also mal den Befehl Dim (-> blitzbase.de) und verschiedenste Beispiele an, einfache Sternenfelder z.B.

Freeman

BeitragMi, Dez 17, 2003 22:56
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, thx

BladeRunner

Moderator

BeitragDo, Dez 18, 2003 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum einzeichnen der Gfx verweist du ja nur auf das Handle der Bilder- und das kannst du kopieren sooft du willst (es ist also nimmer so wie beim C64 z.B. wo man nur 8 sprites hatte).

EDIT: Sehe grade das in FAQs von Jok3 ein Tut zum thema ist... schau dir das doch mal an. Bei Fragen versuch ich gern zu helfen.
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
 

Serge

BeitragFr, Dez 19, 2003 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Man muss den Sprite nicht vervielfachen. Man muss lediglich den selben Sprite mehrmals auf dem Bildschirm "zeichnen".
Und jeder Schuss braucht seine eigene Variablen dann (wofür man am besten gleich ein Array nimmt wie Triton sagte)
Kann es sein dass du davor mit Dark Basic schonmal einweng was versucht hast? Denn dort wurden Sprites etwas anders (recht komisch) gehandhabt.
http://www.dark-matter-soft.de

Jan_

Ehemaliger Admin

BeitragFr, Dez 19, 2003 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Achja, hier mal ein kleiner hinweiß, das es nicht zu verständigungs Problemen kommt,

Sprites sind 3D --> können nur einmal gezeichnet werden.
Images sind 2D --> können mehrmals gezeichnet werden

z.B.

Code: [AUSKLAPPEN]
Graphics 640,480.0.2
sebuffer backbuffer()
schuss=Loadimage("schuss.bmp")

repeat
Drawimage schuss,100,100
Drawimage schuss,0,100
Drawimage schuss,0,50
Drawimage schuss,300,200
flip
until keyhit(1)
between angels and insects

Freeman

BeitragFr, Dez 19, 2003 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

ich habe mich mal an dieser Sternenkarte versucht, das war ganz einfach, jetzt hab ich das ganze mal mit nem Schuss gemacht, das sah dann so aus :

Code: [AUSKLAPPEN]
screenbreite = 640
Graphics screenbreite,480
SetBuffer BackBuffer()


bullet = LoadImage("ammo.png")


Dim bulletX(10)
Dim bulletY(10)


Repeat
Cls
Text 100,100,Str(schuss)

If KeyHit(57)
schuss = schuss + 1
If schuss >=10
schuss =0
EndIf
EndIf 




If schuss > 0

For i = 0 To schuss
If bulletx(i) < screenbreite + 5 And bulletx(i) >= 0
bulletx(i) = bulletx(i) + 5
Else
bulletx(i) =-8
EndIf
Next
 
 
For i = 0 To schuss
DrawImage bullet , bulletx(i),bullety(i)
Next

EndIf

Flip
Until KeyDown(1)


so, ich kann jetzt schön schießenm, allerdings nur bis 10, weiter nich, dann werden die sprites nich mehr angezeigt....

simi

BeitragFr, Dez 19, 2003 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, dass liegt daran dass du das Array nur 10 Felder hat

Code: [AUSKLAPPEN]

Dim bulletX(10)
Dim bulletY(10)


Ich würds halt doch mit Types machen, ist nicht so schwer

Code: [AUSKLAPPEN]

Graphics 640,480,0,1
SetBuffer BackBuffer()


Type Schuss                                    ;ein Type-Feld für den Schuss erstellen
   field x                                           ;x-Kordinate des Schusses
   field y                                           ;y-Kordinate des Schusses
end Type

While not(keyHit(1))
   if KeyHit(57) then                                ;Wenn Leertaste gedrückt ...
      s.schuss = new Schuss                            ;Neuer schuss erstellen
      s\x=50                                 ;X und Y Kordinate von diesem schuss auf 50 stellen
      s\y=50
   end if
   For s.schuss = each schuss                              ;Alle schüsse durchgehen
      s\x = s\x+1                                       ;Die x Kordinate des Schusses erhöhen
      Oval s\x,s\y,5,5,1                               ;Schuss zeichnen
      if s\x > 640 then Delete s.schuss   ;Wenn der Schuss auserhalb des Bildschirms
                                                         ; ist können wir ihn löschen
   next
   flip
wend
end


am besten schaus du dir dieses sehr ausführliche Tutorial an
http://www.blitzbase.de/tutorials/shadow_1.htm

cu simi

Freeman

BeitragFr, Dez 19, 2003 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
danke erstmal für die neue Idee, allerdings, wollt ich es so machen wie ich mir das ausgedacht hab, also mit dim . Weil ich kann ja nicht immer was anderes anfangen..., deshalb bitte ich euch wirklich das ihr mir in der Sache helft...

Bitte

BladeRunner

Moderator

BeitragFr, Dez 19, 2003 19:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm... simi hat dir die antwort im prinzip schon gegeben- erweitere Dein Dim-Feld (und alle relevanten Operationen, und du kannst mehr Schüsse darstellen.
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

Freeman

BeitragFr, Dez 19, 2003 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hatte es ja schonmal so, das man ebn mehr schießen kann, aba ich dachte mir, es wird doch ne möglichkeit geben ne Schleife zu machen. Gut, ok, dann mach ich es so.

Danke ^^
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

BladeRunner

Moderator

BeitragFr, Dez 19, 2003 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Grübl...
ich glaub ich versteh jetzt was du meinst.
Da kann ich auf renés Buch verweisen, er macht genau das was du möchtest. Du hast ja gesagt das du es bestellt hast, ich glaub da isses sehr gut erklärt.

Ansonsten versuch ich gern zu helfen (wenn ich auch n bissl im streß bin derzeit).
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
 

dubitat

BeitragSa, Dez 20, 2003 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
also zu den dim feldern:

du weißt ja, das eine bestimmte anzahl von schüssen nur auf den bildschirm passt oder?

also ich würde eine for next schleife anlegen, nach dem folgenden prinzip:

[edit]
ich bekomm das jetzt nich erklärt...

Freeman

BeitragSa, Dez 20, 2003 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
dann versuchs einfach zu erklären, mehr als falsch sein kann es ja nich ^^
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28
 

dubitat

BeitragSo, Dez 21, 2003 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ok also:
Code: [AUSKLAPPEN]

dim schuss(x,y)

for I = 1 to höchst_anzahl     

;wie viele schüsse nachher der user höchstens schießen darf/kann.
;höchst_anzahl kannste auch so verändern, das du verschiedene modis hast,
;wie zb. maschinengewehr oder schrotflinte oder was weiß ich :P

if schuss = true then
 schuss(x,y) = schuss(x+1,y)
 drawimage schuss_pic, schuss(x,y), schuss(x,y)
endif
delay 300 ; ich weiß das mich jetzt alle lünchen werden, aber ich weiß zurzeit keine andere lösung...(vielleicht mit wait?)
;nimm auf gar keinen fall dieses delay mit in dein programm sondern ne andere warte funktion
;nur mit fällt keine ein im Moment.
;Dieses delay hält dein ganzes programm an, was ja nicht sinnvoll ist,
;da ja das raumschiff auch bewegt werden soll und das durch das delay ruckeln wird
;soll das raumschiff schneller schießen, musst du auch die zeit ändern, da ja sonst das ganze nichts bringt.
;mit dem +1 kannste noch ein bischen rumexperimentieren genauso, wie mit dem delay...
;das soll nur ein code beispiel sein und keine komplett lösung...
next


ich hoffe, das ich dir geholfen habe...

Freeman

BeitragSo, Dez 21, 2003 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
also erstma vielen herzlichen dank an dich dubitat . Aber is das nicht vom Sinn her der selbe Code wie meiner? nur ebn ohne Begrenzung und so? Weil bei dir gibs doch auch ne Begrenzung an Schuss. Ich habe das ganze jetzt so gemacht das ich nen Wert festgelegt habe und mit dem bastle ich jetzt. Achso ich habe nochne Frage bezüglich meiner Dim Werte:

Ist es möglich diese Werte zu verändern, also ich mein wenn mein wenn man zum Beispiel schreibt:
Code: [AUSKLAPPEN]

dim BulletX(200)
bla,bla,bla


wenn dieser Bulletx Wert bei 200 liegt dann dürfte es ja nichmehr weiter gehn, das man dann einfach den Wert um 199 subtrahiert , so das man dann wieder bei 1 steht. Ist sowas möglich?

Danke an alle , Freeman
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group