Seite 3 von 3

Verfasst: 15.11.2005 17:25
von Ypser
War nur ein Pseudo-Befehl. Hab lange nix mehr mit PB gemacht und wollte net erst nachschlagen :mrgreen:

Aber hast natürlich Recht, braucht man bei dem BlendingMode net.

[edit]
TransparentSpriteColorHyperSpaceMegaDingensGedöns... meinte ich doch...

Kein Wunder, dass man diese ewig langen PB-Befehlsnamen nach ner
Weile vergisst, man wird ja auch net jünger :lol:
[/edit]

Verfasst: 15.11.2005 23:48
von benpicco
Na gut, dann ist es wohl doch das Beste alles vorher als Grafik zu erstellen und dann anzeigen zu lassen.
Aber wie kann ich jetzt noch Farbe ins Spiel bringen, das das Lensflare und die Strahlen zozusagen mit (berechneter) Textur überzpgen werden. (Wen es statisch ist, sieht es doch sehr unrealistisch aus, die Farbe müsste sich schon etwas ändern können)

Verfasst: 16.11.2005 14:24
von dllfreak2001
Ich hab das mal so gemacht:
Ich hab jeweils ein Sprite in Rot, Grün und Blau hergestellt.
Mit dem Fade-Parameter von Sprite3D, jeweils durchlaufen lassen.
Kannst dann damit jede beliebige Farbe herstellen.

Verfasst: 18.11.2005 10:08
von benpicco
Danke, funktioniert perfekt! :allright:

Verfasst: 19.11.2005 21:22
von Andre
@dllfreak2001: haste mal ein kurzes Beispiel zum Posten bei der Hand?

Würde dies gerne mit ins CodeArchiv (und evtl. auch in die Hilfe?) mit aufnehmen.

Danke im voraus!

Verfasst: 19.11.2005 23:59
von benpicco
Naja, so wie ich das nachgebaut hab, find ich es eigentlich zu Simpel für´s CodeArchiv, sind ja nur 3 Vorberechnete Bilder, also ich hab´s so gemacht:

Code: Alles auswählen

InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()

Procedure.f Gsin(winkel.f) 
  preturn.f=Sin(winkel*(2*3.14159265/360)) 
  ProcedureReturn preturn 
EndProcedure 
Procedure.f Gcos(winkel.f) 
  preturn.f=Cos(winkel*(2*3.14159265/360)) 
  ProcedureReturn preturn 
EndProcedure 

Procedure DisplayRGBFlare(x,y,red,green,blue,angle)
  Sprite3DBlendingMode(5,7)
  RotateSprite3D(1,angle,0)
  RotateSprite3D(2,angle,0)
  RotateSprite3D(3,angle,0)
  DisplaySprite3D(1,x,y,red)
  DisplaySprite3D(2,x,y,green)
  DisplaySprite3D(3,x,y,blue)
EndProcedure
OpenScreen(1024,768,32,"test")
LoadSprite(0,"gfx\ray.bmp")
LoadSprite(1,"gfx\nova_red.bmp",#PB_Sprite_Texture)
LoadSprite(2,"gfx\nova_green.bmp",#PB_Sprite_Texture)
LoadSprite(3,"gfx\nova_blue.bmp",#PB_Sprite_Texture)
CreateSprite3D(1,1)
CreateSprite3D(2,2)
CreateSprite3D(3,3)
DisplaySprite(0,0,0)
Width =SpriteWidth(0)
Sprite3DQuality(1)
MouseLocate(300,300)
Repeat
  FlipBuffers(0)
  ExamineMouse()
  ExamineKeyboard()
  ClearScreen(0,0,0)
  If x.f<360
    x+0.1
  Else
    x=0
  EndIf
  Start3D()  
  If KeyboardPushed(#PB_Key_Q) And red<255
    red+1
  ElseIf KeyboardPushed(#PB_Key_A) And red>0
    red-1
  EndIf
  If KeyboardPushed(#PB_Key_W) And green<255
    green+1
  ElseIf KeyboardPushed(#PB_Key_S) And green>0
    green-1
  EndIf
  If KeyboardPushed(#PB_Key_E) And blue<255
    blue+1
  ElseIf KeyboardPushed(#PB_Key_D) And blue>0
    blue-1
  EndIf
  DisplayRGBFlare(TargetX,TargetY,red,green,blue,x)
  DisplayRGBFlare(TargetX,TargetY,red,green,blue,360-x)
  Stop3D()
  StartDrawing(ScreenOutput())
  Locate(1,1)
  DrawText("Red:" +Str(red)+ " Green:" +Str(green)+" Blue:"+Str(blue))
  StopDrawing()
  TargetX=MouseX()
  TargetY=MouseY()
  
Until KeyboardPushed(#PB_Key_Escape)
schneller ist´s natürlich, wen man DisplayRGBFlare( nur 1* aufruft und dafür in der Procedure das hier macht

Code: Alles auswählen

  Sprite3DBlendingMode(5,7)
  RotateSprite3D(1,angle,0)
  RotateSprite3D(2,0,0)
  RotateSprite3D(3,360-angle,0)
  DisplaySprite3D(1,x,y,red)
  DisplaySprite3D(2,x,y,green)
  DisplaySprite3D(3,x,y,blue)
Gibt einen hübschen *fast* Zufallsfarbton - Effekt
(ich weiß aber nicht´s ob´s dllfreak genau so gelöst hat)
Achja, hier noch die bmps (wow, lassen die sich gut packen!)
http://mitglied.lycos.de/benpicco/loade ... ad=gfx.rar

Verfasst: 20.11.2005 00:51
von Andre
@benpicco: Danke :)

Vielleicht zeigt ja auch dllfreak2001 noch etwas von seinem Code... :wink:

Verfasst: 20.11.2005 14:27
von unix
Ich wollte auch mal so etwas machen

das einzige was du machen kannst du vergleichst zwei Bilder (eins mit und eins ohne) und schreibst die unterschiede in einer Datei.

Im Spiel gehst du dann alle Pixel durch (am besten mit Drawingbuffer) und änderst die Pixel nach den in der Datei geschriebenen Werten.

evtl. x,y, länge und winkel anpassen ist zwar kompliezierter aber möglich

Verfasst: 20.11.2005 17:15
von dllfreak2001
Ich hab das mal nur zum Spaß gebaut (irgendwann mal, hab auch schon wieder gelöscht).
Das ist wie Benpicco schon sagt eher ne Methode als Code.
Würdest nicht mehr sehen als bei dem von Benpicco (meins war noch nicht mal so in einer Procedure verpackt).