Seite 1 von 1
TransparentSpriteColor
Verfasst: 15.01.2008 19:25
von Polarwolf
For idx = 0 To 1
TransparentSpriteColor(idx,0,67,171)
Next
Kann mir bitte jemand erklären warum mein Compiler / Debugger daraufhin immer folgende Zeile rausgiebt? Ich kann es mir nicht erklären, weil ich die Variable genau wie in der Hilfe verwende.
TransparentSpriteColor(): Incorrect number of parameters.[/i]
Verfasst: 15.01.2008 19:35
von RSBasic
@Polarwolf
TransparentSpriteColor() hat nur zwei Parameter
Verfasst: 15.01.2008 19:36
von Polarwolf
Habs grade per PN erfahren...
Ich muss die RGP- Farben in eine Klammer hinter RGB setzen! XD
Vielen Dank @all!
Nochmal eine Frage... dieser Code stammt aus einem Tutorial aber gibt auch eine Fehlermeldung raus... könnte mir da jemand helfen? Hat jmd. aktuelle Guides/Tuts?
Code: Alles auswählen
Declare KeyboardHandling()
Declare NewEnemyWave()
Declare EnemyDisplay()
Declare EnemyMovement()
InitSprite()
InitKeyboard()
InitMouse()
OpenScreen(1024,768,16,"Shooter")
#ScreenW = 1024
#ScreenH = 768
#HeroH = 98
#HeroW = 98
#EnemyH = 32
#EnemyW = 32
;PNG Lib
UsePNGImageDecoder()
LoadSprite(0, "fx\Background.png")
LoadSprite(1, "fx\Hero.png")
LoadSprite(2, "fx\Enemy.png")
For idx = 0 To 2
TransparentSpriteColor(idx,RGB(0,67,171))
Next
;Heldstruktur
Structure Hero
X.l
Y.l
EndStructure
;gegnerisches Flugzeug Struktur
Structure Enemy
X.l
Y.l
EndStructure
;global verfügbare Variablen
Global Fighter.Hero
Global Gegner.Enemy
;Feindliste
NewList Feinde.Enemy()
;init
Fighter\X=#ScreenW/2 - (#HeroW/2)
Fighter\Y=#ScreenH-#HeroH
NewEnemyWave()
;Hauptprogrammschleife
Repeat
;Mouse und Keyboard init
ExamineKeyboard()
ExamineMouse()
KeyboardHandling()
;Screen löschen
ClearScreen(RGB(0,0,0))
;Hintergrund darstellen
DisplaySprite(0,0,0)
;Held darstellen
DisplayTransparentSprite(1,Fighter\X,Fighter\Y)
;Feinde darstellen
EnemyDisplay()
;Feindbewegung
EnemyMovement()
FlipBuffers()
Until KeyboardPushed(1)
Procedure KeyboardHandling()
If KeyboardPushed(#PB_Key_Right)
If Fighter\X < #ScreenW - #HeroW
Fighter\X+2
EndIf
ElseIf KeyboardPushed(#PB_Key_Left)
If Fighter\X > 0
Fighter\X-2
EndIf
ElseIf KeyboardPushed(#PB_Key_Up)
If Fighter\Y < (#ScreenH + #HeroH)
Fighter\Y-2
EndIf
ElseIf KeyboardPushed(#PB_Key_Down)
If Fighter\Y > (0 + #HeroH)
Fighter\Y+2
EndIf
EndIf
EndProcedure
Procedure NewEnemyWave()
enemycounter.l
enemycounter = Random(8)
If CountList(Feinde()) = 0
;Feinde erstellen
For idx = 1 To enemycounter
AddElement(Feinde())
Next
ForEach Feinde()
Feinde()\X = Random(1024)
Feinde()\Y = Random(200)
Next
EndIf
EndProcedure
Procedure EnemyDisplay()
;Gegner darstellen
ForEach Feinde()
DisplayTransparentSprite(2, Feinde()\X, Feinde()\Y)
Next
EndProcedure
Procedure EnemyMovement()
;Feindbewegung
ForEach Feinde()
Feinde()\Y = Feinde()\Y + 1.1
If Feinde()\Y >= #ScreenH
Feinde()\Y = 0
Feinde()\X = Random(#ScreenW)
EndIf
Next
EndProcedure
Verfasst: 15.01.2008 20:17
von #NULL
ändern in:
..seit pb4 sind arrays und linked lists nicht mehr per default Global, sondern Lokal
Verfasst: 15.01.2008 20:20
von Polarwolf
!Vielen Dank!
Ich werds mir merken!

Verfasst: 16.01.2008 12:08
von Kaeru Gaman
wenn man immer die gleiche background-farbe hat, kann man sich die schleife sparen:
aus
Code: Alles auswählen
LoadSprite(0, "fx\Background.png")
LoadSprite(1, "fx\Hero.png")
LoadSprite(2, "fx\Enemy.png")
For idx = 0 To 2
TransparentSpriteColor(idx,RGB(0,67,171))
Next
macht man
Code: Alles auswählen
TransparentSpriteColor(#PB_Default, RGB(0,67,171))
LoadSprite(0, "fx\Background.png")
LoadSprite(1, "fx\Hero.png")
LoadSprite(2, "fx\Enemy.png")