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.