TransparentSpriteColor

Anfängerfragen zum Programmieren mit PureBasic.
Polarwolf
Beiträge: 56
Registriert: 14.01.2008 20:34

TransparentSpriteColor

Beitrag 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]
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Polarwolf
TransparentSpriteColor() hat nur zwei Parameter
Polarwolf
Beiträge: 56
Registriert: 14.01.2008 20:34

Beitrag 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

Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

NewList Feinde.Enemy()
ändern in:

Code: Alles auswählen

Global NewList Feinde.Enemy()
..seit pb4 sind arrays und linked lists nicht mehr per default Global, sondern Lokal
my pb stuff..
Bild..jedenfalls war das mal so.
Polarwolf
Beiträge: 56
Registriert: 14.01.2008 20:34

Beitrag von Polarwolf »

!Vielen Dank!

Ich werds mir merken! :D
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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")
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten