Seite 1 von 1
Elemente Definieren
Verfasst: 16.02.2007 19:23
von D4uS1
Ich habe ein kleines Problem bezüglich einer LinkedList. Ich habe mehrere Elemente in Form eines bildes. Diese Bilder werden per Zufallsgenerator an die richtige Position gebracht. Das problem daran ist nur das ich nicht möchte das sich die Bilder überschneiden. Wie kann ich das verhindern. Ich müsste dafür denke ich die einzelnen Elemente Definieren und dann eine Zeile einfügen in der es heißt, dass sie sich nicht überschneiden dürfen.
Code: Alles auswählen
NewList Bild.BITMAP()
If Elemente < 3
AddElement(Bild())
Elemente +1
endif
ForEach Bild()
Bild()\bmWidth = random(768)
;-----Hier müsste dann der Code hin der besagt das die einzelnen bilder sich nicht pberlappen dürfen
DisplayTransparentsprite(0, Bild()\bmWidth, Bild()\bmHeight
next
Ps: Der Originalcode ist ziemlich groß, kann sein das ich irgentetwas vergessen habe. Das Bild ist 200*200 Pixel groß.
Verfasst: 16.02.2007 20:24
von Scarabol
Sorry, aber ich versteh nicht ganz dein Problem...
1. Kannst du mal die Struktur Bitmap posten, oder wo find ich die?
2. Was heißt "Diese Bilder werden per Zufallsgenerator an die richtige Position gebracht."? Entweder die Bilder sind richtig oder nicht, da kann man keine Zufallsfunktion einbauen oder wie stellst du dir das vor?
3. Prüf doch einfach für jedes Bild mit Foreach Bild() ob an der Stelle schon ein Bild ist oder nicht.
Gruß
Scarabol
Verfasst: 16.02.2007 20:32
von Fluid Byte
Code: Alles auswählen
#SPRITECX = 60
#SPRITECY = 60
#SPRITENUM = 15
InitSprite() : InitKeyboard()
OpenWindow(0,0,0,640,480,"untitled",#WS_SYSMENU | #WS_CAPTION | 1)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)
LoadFont(0,"Arial Black",25)
For i=0 To #SPRITENUM-1
CreateSprite(i,#SPRITECX,#SPRITECY)
StartDrawing(SpriteOutput(i))
DrawingFont(FontID(0))
DrawingMode(1)
Box(1,1,#SPRITECX-2,#SPRITECY-2,#Red)
DrawText(#SPRITECX/2-TextWidth(Str(i+1))/2,#SPRITECY/2-TextHeight(Str(i+1))/2,Str(i+1))
StopDrawing()
Next
Structure SPRITE
ID.w
X.w
Y.w
EndStructure
Global NewList spr.SPRITE()
Procedure SpriteOverlap(X.w,Y.w)
ForEach spr()
If SpriteCollision(0,X,Y,0,spr()\X,spr()\Y)
ProcedureReturn 1
EndIf
Next
ProcedureReturn 0
EndProcedure
Repeat
X = Random(640 - #SPRITECX)
Y = Random(480 - #SPRITECY)
If SpriteOverlap(X,Y) = 0
AddElement(spr())
spr()\ID = CountList(spr()) -1
spr()\X = X
spr()\Y = Y
EndIf
Until CountList(spr()) = #SPRITENUM
Repeat
EventID = WindowEvent()
ClearScreen($CCCCCC)
ExamineKeyboard()
ForEach spr()
DisplaySprite(spr()\ID,spr()\X ,spr()\Y)
Next
FlipBuffers()
Until KeyboardPushed(1) Or EventID = 16