kleines prob mit types

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Eschenbach

Betreff: kleines prob mit types

BeitragSo, Apr 13, 2008 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin dabei, wieder BlitzBasic zu programmieren, ich benutze Blitz3d. Ich habe schon ein paar Vorkenntnisse im Bereich Programmieren und hatte auch schon mit B3d programmiert. Jetzt versuche ich wieder reinzukommen und habe dafür ein kleines Beispiel geschrieben. In diesem Beispiel wollte ich dann auch versuchen, Types zu benutzen(was ich bis jetzt noch nicht benutzt hatte). Das beispiel
ist einfach nur ein Quadrat, welches mit den Pfeiltasten über den Bildschirm bewegt wird, das war kein Problem. Ich wollte, um Types einzubeziehen, dass immer wenn ich das Quadrat bewege, kleine Kreise
nach außen wegfliegen. Wenn ich den Code lese, müsste er eigentlich funktionieren, aber wenn ich ihn Ausführe kommt aber eine Fehlermeldung "Object doesn't exist". Kann einer von euch mir erklären was ich falsch gemacht habe? Leider konnte ich für das spezifische problem schlecht die sufu benutzen...
Hier das Programm:
Code: [AUSKLAPPEN]
Graphics 640,480,16,0
SetBuffer BackBuffer()
SeedRnd MilliSecs()


Global rectx=50
Global recty=50
Global bewegung

Type part
   Field x
   Field y
   Field xvel
   Field yvel
End Type

ClsColor 232,105,7
Color 63,63,63


;#################################*+-Hauptschleife-+*################################

Repeat
   Cls
   Rect rectx,recty,50,50,1
   Flip
   bewegung = False
   bewege_quadrat()
   If bewegung = True Then partikel()
   titel$ = "x: " + rectx + ", y: " + recty
   AppTitle titel
Until KeyHit(1)
End



;##################################*+-Funktionen-+*##################################
Function bewege_quadrat()
   ;Pfeil hoch
   If KeyDown(200) And recty > 0 Then
      recty = recty-5
      bewegung = True
   EndIf

   ;Pfeil runter
   If KeyDown(208) And recty < 430 Then
      recty = recty+5
      bewegung = True
   EndIf

   ;Pfeil links
   If KeyDown(203) And rectx > 0 Then
      rectx = rectx-5
      bewegung = True
   EndIf

   ;Pfeil rechts
   If KeyDown(205) And rectx < 590 Then
      rectx = rectx+5
      bewegung = True
      
   EndIf

End Function


Function partikel()
;wenn das Quadrat sich bewegt, sollen neue Objekte erstellt werden, xvel und yvel
;sollen den Kreis in eine zufällige Richtung fliegen lassen
   If bewegung = True Then
      f.part = New part
      f\x = rectx
      f\y = recty
      f\xvel = Rnd(-5,5)
      f\yvel = Rnd(-5,5)
   EndIf
;Die Bewegung wird berechnet, außerhalb vom bildschirm sollen sie gelöscht werden,
;ansonsten wird ein Kreis gezeichnet
   For f.part = Each part
      f\x = f\x + f\xvel
      f\y = f\y + f\yvel
      Oval f\x,f\y,3,3
      If f\x < 0 Or f\x > 640 Then Delete f
      If f\y < 0 Or f\y > 480 Then Delete f
   Next
End Function
Gruß, Eschenbach

Noobody

BeitragSo, Apr 13, 2008 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
      If f\x < 0 Or f\x > 640 Then Delete f
      If f\y < 0 Or f\y > 480 Then Delete f


Wenn der Type bei der ersten Abfrage gelöscht wird, so gibt es einen Fehler, wenn du die zweite Abfrage ausführst, da du versuchst, auf einen Type zuzugreifen, den du eine Zeile vorher gelöscht hast.
Die zweite Abfrage darf nur ausgeführt werden, wenn die Abfrage vorher nicht zugetroffen hat.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun
 

Eschenbach

BeitragSo, Apr 13, 2008 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke. ich hab das jetzt mit elseif geregelt. Die Meldung kommt jetzt nicht mehr, aber es kommen immer noch keine kreise...ich hab auch mal die bedingung weggenommen, dass nur Kreise kommen, wenn das Quadrat sich bewegt, aber es kommen trotzdem keine...
Code: [AUSKLAPPEN]
Function partikel()
;wenn das Quadrat sich bewegt, sollen neue Objekte erstellt werden, xvel und yvel
;sollen den Kreis in eine zufällige Richtung fliegen lassen
      f.part = New part
      f\x = rectx
      f\y = recty
      f\xvel = Rnd(-5,5)
      f\yvel = Rnd(-5,5)
;Die Bewegung wird berechnet, außerhalb vom bildschirm sollen sie gelöscht werden,
;ansonsten wird ein Kreis gezeichnet
   For f.part = Each part
      f\x = f\x + f\xvel
      f\y = f\y + f\yvel
      Color 255,255,255
      Oval f\x,f\y,3,3
      If f\x < 0 Or f\x > 640 Then
      Delete f
      ElseIf f\y < 0 Or f\y > 480 Then
      Delete f
      EndIf
   Next
End Function

Noobody

BeitragSo, Apr 13, 2008 19:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast ja auch das Flip falsch gesetzt.
Du löscht den Bildschirm, zeichnest den Spieler und zeigst das ganze auf dem Bildschirm - dann zeichnest du die Kreise, die gleich wieder durch Cls gelöscht werden.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

Der_Schläfer

BeitragSo, Apr 13, 2008 19:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein festes Framelimit würde auch nicht schaden, oder willst dass dein Spiel auf besseren Rechners schneller läuft?
  • Zuletzt bearbeitet von Der_Schläfer am So, Apr 13, 2008 19:10, insgesamt einmal bearbeitet
 

Eschenbach

BeitragSo, Apr 13, 2008 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
aaaah! alles klar^^ dadran hab ich gar nich gedacht. danke!
Gruß, Eschenbach
 

Eschenbach

Betreff: framelimit

BeitragSo, Apr 13, 2008 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
@Der_Schläfer: ja das mach ich eig immer nur das soll ja wie oben beschrieben nur ein test sein, um in bb wieder reinzukommen und um types zu benutzen, trotzdem danke für deinen rat;)
Gruß, Eschenbach

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group