Kurze Type Frage:

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

relentless92

Betreff: Kurze Type Frage:

BeitragDi, Sep 29, 2009 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Huhu,
Ist es möglich, bei einem Type:

Code: [AUSKLAPPEN]
Type powerup
   Field x
   Field y
   Field typ
End Type


Folgendes zu erstellen?

Code: [AUSKLAPPEN]
If timer_powerup>=500 Then
timer_powerup=0
   
   item1.powerup=New powerup
   item1\x=Rnd(5,460)
   item1\y=225
   item1\typ=Rnd(1,5)
   
   item2.powerup=New powerup
   item2\x=Rnd(5,460)
   item2\y=225
   item2\typ=Rnd(1,5)
   
EndIf


Bei der Abfrage der Bewegung nämlich...

Code: [AUSKLAPPEN]
For item1.powerup = Each powerup
   item1\y=item1\y-3
      Rect item1\x,item1\y,10,10,1
      
      Text 0,40,item1\y
      Text 0,50,item1\x
      
Next

For item2.powerup = Each powerup
   item2\y=item2\y+3
      Rect item2\x,item2\y,10,10,1
Next


Bewegt sich nichts.

MfG

Tankbuster

BeitragDi, Sep 29, 2009 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ganze musst du mit einer "Statusvariable" machen.
Ob du
Code: [AUSKLAPPEN]
item1.item=First Item

oder
Code: [AUSKLAPPEN]
item2.item=First Item

schreibst ist kein Unterschied. Es wird in beiden fällen das eine Item angesprochen. Bei Each ist es genauso.
Bei dir bewegt sich deshalb nichts, weil du den y wert erst um 3 verringerst, und dann um 3 wieder erhöhst.


So richtig:

Zitat:
Type powerup
Field status
Field x
Field y
Field typ
End Type

Zitat:

If timer_powerup>=500 Then
timer_powerup=0

For i=0 to 1
item1.powerup=New powerup
item1\Status=i
item1\x=Rnd(5,460)
item1\y=225
item1\typ=Rnd(1,5)
next

EndIf



Zitat:
For item1.powerup = Each powerup
If item1\Status=0 Then
item1\y=item1\y-3
Rect item1\x,item1\y,10,10,1

Text 0,40,item1\y
Text 0,50,item1\x
ElseIf item1\Status=1
item1\y=item2\y+3
Rect item1\x,item2\y,10,10,1
Endif
Next
Twitter
Download Jewel Snake!
Windows|Android
  • Zuletzt bearbeitet von Tankbuster am Di, Sep 29, 2009 15:25, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragDi, Sep 29, 2009 15:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt nur eine Liste von Powerups die du mit For...Each durchgehen kannst. Ob die Zugriffsvariable beim erstellen item1, item2 oder sonstwie heißt, ist egal, es kommt alles in die selbe Liste.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

relentless92

BeitragDi, Sep 29, 2009 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles klar, danke dir!

relentless92

BeitragDi, Sep 29, 2009 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab da nun ein Problem bezüglich meiner Kollision:
Wenn sie sich berühren gibt der Debugger nix aus:

Code: [AUSKLAPPEN]
Function Powerups()

timer_powerup=timer_powerup+1
   Text 0,20,timer_powerup
If timer_powerup>=500 Then
timer_powerup=0
   
   For i=0 To 1
   item1.powerup=New powerup
   item1\status=i
   item1\x=Rnd(5,460)
   item1\y=225
   item1\typ=Rnd(1,5)
   Next
   
EndIf

For item1.powerup = Each powerup

   If item1\status=0 Then
   
      item1\y=item1\y-3      
      Rect item1\x,item1\y,10,10,1
      
      If item1\typ=1 Then
   
         If RectsOverlap(xp1,yp1,sp1_breite,10,item1\x,item1\y,10,10) Then
            DebugLog "Koll1"
            sp1_breite=445
            Rect xp1,yp1,sp1_breite,10,1
         EndIf
         
      EndIf
      
   EndIf
      

   
   If item1\status=1 Then
   
      item1\y=item1\y+3
      Rect item1\x,item1\y,10,10,1
      
      If item1\typ=1 Then
      
         If RectsOverlap(xp2,yp2,sp2_breite,10,item1\x,item1\y,10,10) Then
            DebugLog "Koll2"
            sp2_breite=445
            Rect xp2,yp2,sp2_breite,10,1
         EndIf
         
      EndIf
      
   EndIf
   
      
      
If item1\y<=-5 Or item1\y>=670 Then
Delete item1.powerup
EndIf
      
Next

End Function


Genausowenig passiert das Erwünschte. Kommen sich die If-Abfragen in dem Type ins Gehege?

MfG

Nicdel

BeitragDi, Sep 29, 2009 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich das richtig sehe, überprüfst du ein Rechteck mit der Breite sp1_breite. sp1_breite wird aber erst bei einer Kollision auf einen Wert gesetzt und ist davor 0.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

relentless92

BeitragMi, Sep 30, 2009 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, natürlich nicht, das Rechteck wird immer benutzt, SP1_Breite ist am Anfang auch Global = 100 Wink
Habe nur den Abschnitt nicht mitkopiert, dann kann sowas passieren.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group