Ein Problem mit Types und einer Schussfunktion... plz help

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

reptile

Betreff: Ein Problem mit Types und einer Schussfunktion... plz help

BeitragSo, Jun 25, 2006 22:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Embarassed Ich hab hier ein kleines Problem mit meinem Code:
Ich bekomme es einfach nicht hin, das der Schuss bei jedem durchlauf gelöscht wird.
Es Tritt ein Fehler auf, wenn das Bild gelöscht werden soll.
Angeblich sei a.Schuss\Bild kein Type.
Aber das Bild zu malen funktioniert doch!
Könnt ihr mir vielleicht einen Tipp geben, an welcher stelle die Zeile "Delete a.Schuss\Bild" hinmuss oder was für eine Abfrage ich nehmen kann.

ps: BlitzBasic macht mir einen riesen Spass und ich freue mich, dass ich diese tolle Seite hier entdeckt habe! Smile)

Ich konnte leider nicht rausfinden, warum der BBCode nicht funzt... sry



BlitzBasic: [AUSKLAPPEN]
Global xmax=800,ymax=600
Graphics xmax,ymax,32,1
SetBuffer BackBuffer()
Global FrameTimer=CreateTimer(70)

Type Schuss
Field x
Field y
Field Bild
End Type

Global Eusch1=LoadImage("gfx\eusch1.bmp")

Global Eusch2=LoadImage("gfx\eusch2.bmp")


Global xEusch=25
Global yEusch=ymax-150

ClsColor 255,255,255


;Hauptschleife
Repeat
WaitTimer(FrameTimer)



If MouseDown(1) Then
DrawImage Eusch2,xEusch,yEusch
schiessen()
schuss()
Else

DrawImage Eusch1,xEusch,yEusch
End If






Flip
Cls
Until KeyHit(1)


Function schiessen()
a.Schuss = New Schuss
a.Schuss\x=200
a.Schuss\y=yEusch+50
a.Schuss\Bild=LoadImage("gfx\schuss.bmp")
MidHandle a.Schuss\Bild
End Function

Function schuss()
For a.Schuss=Each Schuss
a.Schuss\x=a.Schuss\x+3
DrawImage a.Schuss\Bild,a.Schuss\x,a.Schuss\y
Next
End Function




End


~EDITIERT~
Codetags hinzugefügt. MfG BladeRunner

Cardonic

BeitragSo, Jun 25, 2006 22:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Verwende : Code: [AUSKLAPPEN]
a\Bild


Zudem bringt es nicht viel, in jedem Schuss-Type einzeln das Bild zu speichern. Viel besser wäre es, wenn du ein globales Bild hättest.

mfg Cardonic

Edit:
Oh; ich sehe, dass dies dein erster Post hier ist.
Hier noch ein kleines Beispiel : Code: [AUSKLAPPEN]
Type Schuss
   Field x,y
End Type

Graphics 800,600,32,2

SetBuffer BackBuffer()

Repeat

   Cls

   ; Schuss erstellen, wenn Maustaste gedrückt wird
   If MouseHit(1) Then
      a.Schuss = New Schuss
      a\x = MouseX()
      a\y = MouseY()
   EndIf

   For a.Schuss = Each Schuss
      If a\x > 800 Then
         ; Schuss löschen
         Delete a.Schuss
      Else
         ; Schuss bewegen
         a\x = a\x + 1
         ; Schuss Zeichnen
         Rect a\x,a\y,2,2
      EndIf
   Next

   Flip

Until KeyHit(1)


Achja, du kannst hier im Forum deinen Code [code] ... Code ... [/Code] hervorheben.
 

reptile

BeitragSo, Jun 25, 2006 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
wow, danke für die schnelle Antwort.
Man muss ja garnicht das Bild löschen, sonder den Type dafür! Aha effekt rockt.
leider ist es jetzt schon spät. Ich probier es morgen weiter.
danke nochmal

PSY

BeitragSo, Jun 25, 2006 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
hoi,

zu deinem code:

Arrow pics werden i.d.r. immer ausserhalb von mainloops, funcs und subs geladen
Arrow wenn jeder schuss gleich aussehen soll, brauchst du das pic nicht extra im type zu deklarieren. ich geh davon aus, dass du verschiedene schüsse haben willst, deshalb hab ich das pic bei meinem code auch im type gelassen. trotzdem wird es nur EINMAL geladen Exclamation
Arrow a.schuss\x usw. kannst du durch a\x ersetzen, ist einfacher
Arrow der schuss sollte gelöscht werden, sobald er den bildschirm verlässt
Arrow alle schüsse müssen in der mainloop gezeichnet werden

ich hab deinen code mal angepasst. dazu folgendes:
Idea sobald die maus geklickt wird, wird 1 schuss abgefeuert
Idea wird die maus gehalten, zeichnet er eusch2, ansonsten eusch1 (wie bei dir)
Idea verlässt der schuss den bildschirm (850 ist natürlich nix genaues, kommt auf dein finales schusssprite an), wird der schuss gelöscht

Code: [AUSKLAPPEN]

Global xmax=800,ymax=600
Graphics xmax,ymax,32,1
SetBuffer BackBuffer()
Global FrameTimer=CreateTimer(70)

Type Schuss
  Field x
  Field y
  Field Bild
End Type

Global Eusch1=LoadImage("gfx\eusch1.bmp")
Global Eusch2=LoadImage("gfx\eusch2.bmp")
Global shot=loadimage ("gfx\schuss.bmp")

Global xEusch=25
Global yEusch=ymax-150

ClsColor 255,255,255


;Hauptschleife
Repeat

  WaitTimer(FrameTimer)
  Cls
 
  If MouseHit(1) Then newshot()
 
  If MouseDown(1) Then
    DrawImage Eusch2,mousex(),mousey()
      Else
        drawImage Eusch1,mousex(),mousey()
  End If

  draw_shot()
 
   Flip
   
Until KeyHit(1)

End

Function newshot()

  a.schuss = New schuss
  a\x=mousex()+50
  a\y=mousey()
  a\bild=shot
 
End Function


Function draw_shot()

  For a.schuss=each schuss
    a\x=a\x+3
    DrawImage a\bild,a\x,a\y
    If a\x > 850 Then Delete a.schuss
  Next
 
End Function



hoffe es hilft dir weiter


l8er,
psy
 

reptile

BeitragMo, Jun 26, 2006 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Super! Vielen dank für deine Antwort PSY und nochmal danke für deine Cardonic!
Ich hatte einen kleinen Denkfehler und zwar dachte ich Bei jedem durchlauf der Hauptschleife wird der Schuss gezeichnet und müsste dann beim nächsten durchlauf wieder gelöscht werden und dann wird ein neuer gezeichnet...
das ist natürlich Quatsch Laughing

Habs jetzt geschafft und die Schüsse fliegen nur so durch die gegend Wink

PSY

BeitragMo, Jun 26, 2006 12:24
Antworten mit Zitat
Benutzer-Profile anzeigen
gerne Very Happy

bin mal gespannt was draus wird Wink

l8er,
PSY

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group