Hi Kaeru Gaman,
ja... hatte zuerst vermutet das es mit Sprites möglich wäre... aber die einfachste Variante ist wirklich das einfach zu zeichnen.
Danke für eure Hilfe.
Gruss
Markus
			
			
									
									
						runder Laufbalken
- 
				Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
also, das ist sowohl mit Images als auch mit Sprites möglich, 
es kommt darauf an, für welche Oberfläche du es haben willst.
wenn du das auf einer Windows-GUI haben willst,
solltest du Images nehmen und die wechselnd auf ein ImageGadget packen.
wenn das in einem Spiel vorkommen soll, das auf einem Screen laufen soll,
dann nimmst du Sprites, weil Images auf einen Screen zu drawen wesentlich langsamer ist.
und natürlich kannst du beides auch on-the-fly vorbereiten,
also zwei dutzend Bilder beim Programmstart zeichnen,
je schicker es dann aussehen soll desto komplexer wird der code.
wenn du Bilder vorab erstellst und zur Laufzeit von Platte lädst oder aus nem Include ziehst,
kannst du so detailreich werden wie du willst.
es ist unerheblich ob die zwei dutzend Bilder in Paint hingeschmiert werden oder aufwendig mit POV gerendert,
da geht es dann nur noch um den Platz den sie brauchen.
			
			
									
									es kommt darauf an, für welche Oberfläche du es haben willst.
wenn du das auf einer Windows-GUI haben willst,
solltest du Images nehmen und die wechselnd auf ein ImageGadget packen.
wenn das in einem Spiel vorkommen soll, das auf einem Screen laufen soll,
dann nimmst du Sprites, weil Images auf einen Screen zu drawen wesentlich langsamer ist.
und natürlich kannst du beides auch on-the-fly vorbereiten,
also zwei dutzend Bilder beim Programmstart zeichnen,
je schicker es dann aussehen soll desto komplexer wird der code.
wenn du Bilder vorab erstellst und zur Laufzeit von Platte lädst oder aus nem Include ziehst,
kannst du so detailreich werden wie du willst.
es ist unerheblich ob die zwei dutzend Bilder in Paint hingeschmiert werden oder aufwendig mit POV gerendert,
da geht es dann nur noch um den Platz den sie brauchen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
						Der Weise weiß, dass er ein Narr ist.
Ich hab mal auf die schnelle einen Beispielcode geschrieben. Für die Konstate Idea kannst du die Wert 0 bis 2 eingeben. Wenn da das dabei ist was du dir vorstellst sag Bescheid. An deiner Stelle würde ich noch kein Teile aus dem Code rauskopieren, da der Code nicht der schnellst ist, da sin() und cos() sind sehr langsam. (wobei neuschreiben übrings immer besser ist bei fremden Codes, weil man dann weiß was man hat und es auch umwandeln kann)
			
			
									
									Code: Alles auswählen
;Gibt #Idea = 0-2 ein um meine verschiedenen Ideen zu sehen.
#Idea=2
#TransColor=$FF00FF ;Pink
Structure fire
X.f
Y.f
time.l
EndStructure
NewList fire.fire()
InitSprite()
OpenWindow(1,0,0,300,300,"Button",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  OpenWindowedScreen(WindowID(1),0,0,300,300,0,0,0)
  
TransparentSpriteColor(#PB_Default,#TransColor)
  
  Select #Idea
    Case 0
    ;Ein Sprite mit blauer Ring
    CreateSprite(0,100,100)
    StartDrawing(SpriteOutput(0))
    Box(0,0,100,100,#TransColor)
    Circle(49,49,50,$FF0000)
    Circle(49,49,40,#TransColor)
    StopDrawing()
    
    ;rote Partikle (rotes Feuer)
    CreateSprite(1,5,5)
    StartDrawing(SpriteOutput(1))
    Box(0,0,5,5,#TransColor)
    Circle(2,2,3,$0000FF)
    StopDrawing()
    Case 1 To 2
    CreateSprite(0,100,100)
  EndSelect
  
State=0
Repeat
  Repeat
  WEvent=WindowEvent()
    Select WEvent
      Case #PB_Event_CloseWindow
      End
    EndSelect
  Until WEvent=0
  
  If IsScreenActive()
  
    State+1
    If State>360
    State=1
    Update=1
    EndIf
    
  ClearScreen($000000)
  
    Select #Idea
      Case 0
      DisplayTransparentSprite(0,100,100)
      
      For a=0 To State
        If Random(30)=0
        d=40+Random(10)
        bog.d=a/(180/#PI)
        AddElement(fire())
          Fire()\X=150+Sin(bog)*d
          Fire()\Y=150-Cos(bog)*d
        EndIf
      Next a
      
      ResetList(Fire())
        While NextElement(Fire())
        DisplayTransparentSprite(1,Fire()\X,Fire()\Y)
        Fire()\Y-1
        Fire()\Time+1
          If Fire()\Time>30
          DeleteElement(Fire())
          EndIf
        Wend
      
      
      Case 1
      DisplayTransparentSprite(0,100,100)
      
      Bog=State/(180/#PI)
      X=50+Sin(bog)*45
      Y=50-Cos(bog)*45
      
      StartDrawing(SpriteOutput(0))
        If Update
        Box(0,0,100,100,#TransColor)
        EndIf
      Circle(X,Y,5,$FF0000)
      StopDrawing()
      
      Case 2
      DisplayTransparentSprite(0,100,100)
      
      StartDrawing(SpriteOutput(0))
        If Update
        Box(0,0,100,100,#TransColor)
        EndIf
        
        For a=0 To 9
        Bog=(State+a*0.1)/(180/#PI)
        X=50+Sin(bog)*45
        Y=50-Cos(bog)*45
        LineXY(50,50,X,Y,$FF0000)
        Next a
      StopDrawing()
    EndSelect
  
  Update=0
  EndIf
FlipBuffers()
ForEverWindows XP: PB 4.31, PB 4.4, PB 4.51
Open Suse 11.2: PB 4.4
						Open Suse 11.2: PB 4.4
- 
				Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
Sinus-Funktionen kann man beschleunigen, indem man vorab einen lookup-table anlegt:
http://www.purebasic.fr/german/viewtopic.php?t=5884
und wenn man lieber Images als einen Screen verwenden will, gibts auch ein kleines Beispiel von mir dazu:
http://www.purebasic.fr/german/viewtopic.php?t=19394
			
			
									
									http://www.purebasic.fr/german/viewtopic.php?t=5884
und wenn man lieber Images als einen Screen verwenden will, gibts auch ein kleines Beispiel von mir dazu:
http://www.purebasic.fr/german/viewtopic.php?t=19394
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
						Der Weise weiß, dass er ein Narr ist.
