Seite 1 von 1

Eine Animation mit mehreren Zufallspositionen

Verfasst: 21.01.2007 18:14
von D4uS1
Ich habe eine Animation die gleichzeitig an verschiedenen Punkten auf dem Bildschirm erscheinen soll. Da aber nicht immer die Positionen gleich sein sollen(sonst würde das ja langweilig werden), habe ich bestimmt Positionen vorgegeben. Ich habe also jetzt 30 Positionen und 14 Animationen. Die 14 Animationen sollen sich sozusagen eine Position aussuchen.
Doch ich weiß einfach nicht wie ich das ganze in den DisplayTransparentSprite() Befehl einfügen soll.

Code: Alles auswählen

dim posX.w(30)
dim posY.w(30)
dim animX.w(14)
dim animY.w(14)

;-----Die Positionen sind hier alle bezogen, das wäre unnötig die alle anzugeben

For x = 1 to 14
 LoadSprite(x+anim, "Bilder/Animation" +Str(x) +".bmp")
next

repeat
examineKeyboard()

for y = 0 to 30
 for x = 1 to 14
  DisplayTransparentsprite(x+anim, ?????random(???)????????????????)
 next
next

until keyboardpushed(1)
Ihr könnt mich für dumm halten wenn ihr wollt, aber ich bin einfach nicht auf die Lösung gekommen! Die Animationen werden einwandfrei dargestellt wenn ich die Positionen alle angebe, aber ich hätte gerne einen Zufallsgenerator der ich eine der vorgegebenen Positionen aussucht!?

Verfasst: 21.01.2007 19:40
von Fluid Byte
Geht's 'nen bischen präziser?

Starten alle Animationen gleichzeitig? Wann sollen die neuen Positionen gesetezt werden? Bevor oder nachdem eine / alle animationen zuende sind?

Vielleicht hilft dir das:

Code: Alles auswählen

InitSprite() : InitKeyboard()
   
OpenWindow(0,0,0,640,480,"untitled",#WS_SYSMENU | #WS_CAPTION | 1)

OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)

CreateSprite(0,64 * 10,64)

StartDrawing(SpriteOutput(0))
For i=0 To 9
	DrawingMode(0)
	Ellipse(i*64+32,32,32,32,RGB(255-i*25,0,0))
	DrawingMode(4)
	Ellipse(i*64+32,32,32,32,#White)
Next
StopDrawing()

#POSITIONS = 30
#ANIMATIONS = 14

Dim SpritePos.w(#POSITIONS-1,1)
Dim TempPos.w(#ANIMATIONS-1,1)

For i=0 To #POSITIONS-1
	SpritePos(i,0) = Random(640 - 64)
	SpritePos(i,1) = Random(480 - 64)
Next

For i=0 To #ANIMATIONS-1
	PosID = Random(#POSITIONS-1)
	
	TempPos(i,0) = SpritePos(PosID,0)
	TempPos(i,1) = SpritePos(PosID,1)
Next

Repeat
	EventID = WindowEvent()
	
	ClearScreen(RGB(50,0,0))
	
	ExamineKeyboard()
	
	If AnimDelay = 6
		AnimDelay = 0
		
		If AnimFrame = 9 : AnimMode = 1 : EndIf
		If AnimFrame = 0 And AnimMode = 1
			AnimMode = 0
		
			For i=0 To #ANIMATIONS-1
				PosID = Random(#POSITIONS-1)
				
				TempPos(i,0) = SpritePos(PosID,0)
				TempPos(i,1) = SpritePos(PosID,1)
			Next
		EndIf
		
		If AnimMode = 0 : AnimFrame + 1 : EndIf
		If AnimMode = 1 : AnimFrame - 1 : EndIf
	EndIf
	
	AnimDelay + 1
	
	ClipSprite(0,64 * AnimFrame,0,64,64)
	
	For i=0 To #ANIMATIONS-1
		DisplayTransparentSprite(0,TempPos(i,0),TempPos(i,1))
	Next

	FlipBuffers()
Until KeyboardPushed(1) Or EventID = 16

Verfasst: 21.01.2007 21:17
von Kaeru Gaman
der ansatz mit dem array von Fluid ist praktikabel.
wenn du die anzahl vorher nicht weißt, oder sie variieren kann, nimm ne LL.

auf jeden fall musst du die positionen vorab zufallserzeugen,
und in dem display die vorberechneten positionen verwenden,
sonst wechselt das sprite ja in jedem frame die position,
da bekommst du nur wildes geflackere raus.

Verfasst: 22.01.2007 12:04
von D4uS1
ok vielen dank!