Ich hab trotzdem nicht verstanden, WARUM.
Der erste Code Funktioniert doch genausogut wie der 2.
Code: Alles auswählen
EnableExplicit
Define Window, win_Width, win_Height, scr_width, scr_height,Flag, Event, Quit, n,PB_icon_img_id, DC
Define f1.f, f2.f, f3.f
Define offset_x.c, offset_y.c
win_Width = 800
win_Height = 600
scr_width = 290
scr_height = 330
Flag = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
Window = OpenWindow(#PB_Any, 0, 0, win_Width, win_Height, "Pure-Atom", Flag)
If Window And InitSprite() And InitSound()
If OpenWindowedScreen(WindowID(Window), 20, 20, scr_Width, scr_Height, 0, 0, 0)
;LoadSprite(1, "Stylised_Electron.bmp")
;hier im Beispiel nur einfache, ausgefüllte Kreise
CreateSprite(1, 32, 32)
StartDrawing(SpriteOutput(1))
Circle(16,16,16, #Red)
Box( 8,14,16,4,RGB(200,200,200)) ;waagerecht
Box(14, 8,4,16,RGB(200,200,200)) ;senkrecht
StopDrawing()
CreateSprite(2, 32, 32)
StartDrawing(SpriteOutput(2))
Circle(16,16,16, #Blue)
Box( 8,14,16,4,RGB(244,244,244)) ;waagerecht
Box(14, 8,4,16,RGB(244,244,244)) ;senkrecht
StopDrawing()
CreateSprite(3, 32, 32)
StartDrawing(SpriteOutput(3))
Circle(16,16,16, #Green)
Box( 8,14,16,4,RGB(2,2,2)) ;waagerecht
Box(14, 8,4,16,RGB(2,2,2)) ;senkrecht
StopDrawing()
;LoadSprite(1, "Stylised_Atomkern.bmp")
PB_icon_img_id = ExtractIcon_(0,#PB_Compiler_Home+"PureBasic.exe",0)
CreateImage(4,32,32)
CreateImage(5,48,48)
CreateSprite(6,48,48)
DC=StartDrawing(ImageOutput(4))
DrawIcon_(DC,0,0,PB_icon_img_id)
CopyImage(4,5)
ResizeImage(4,48,48,#PB_Image_Smooth)
StopDrawing()
StartDrawing(ScreenOutput())
DrawImage(ImageID(5),0,0,48,48)
StopDrawing()
GrabSprite(6,0,0,48,48)
;etwas Musik kann nicht schaden
LoadSound(1, #PB_Compiler_Home+"Examples\Sources - Advanced\Waponez II\Data\Explosion.wav")
LoadSound(2, #PB_Compiler_Home+"Examples\Sources - Advanced\Waponez II\Data\Lazer.wav")
offset_x = 128
offset_y = 148
Repeat
Event = WindowEvent()
While Event
If Event = #PB_Event_CloseWindow
Quit = 1
EndIf
Event = WindowEvent()
Wend
ClearScreen(#Black)
;Bewegung des roten Elektrons
If f1 >= 359
f1 = 0
Else
f1 + 0.01 ;je größer desto schnelles Elektron
EndIf
;Bewegung des blauen Elektrons
If f2 >= 359
f2 = 0
Else
f2 + 0.02 ;je größer desto schnelles Elektron
EndIf
;Bewegung des grünen Elektrons
If f3 >= 359
f3 = 0
Else
f3 + 0.03 ;je größer desto schnelles Elektron
EndIf
;Elektronenbahnen zeichnen
StartDrawing(ScreenOutput())
For n = 0 To 359
Box(offset_x+16 + Sin(n)*45, offset_y+16 + Cos(n)*145,4,4, #Red)
Box(offset_x+16 + Sin(n)*70 + Cos(n)*100, offset_y+16 + Cos(n)*80,4,4, #Blue)
Box(offset_x+16 + Sin(n)*125, offset_y+16 + Cos(n)*50 - Sin(n)*70,4,4, #Green)
Next
StopDrawing()
;Electronen laufen lassen
DisplayTransparentSprite(1,offset_x + Sin(f1)*45, offset_y + Cos(f1)*145)
DisplayTransparentSprite(2,offset_x + Sin(f2)*70 + Cos(f2)*100, offset_y + Cos(f2)*80)
DisplayTransparentSprite(3,offset_x + Sin(f3)*125, offset_y + Cos(f3)*50 - Sin(f3)*70)
DisplayTransparentSprite(6,offset_x -12,offset_y-6)
;etwas Stimmung in die Bude....
;kollidiert 1 mit 2?
If SpriteCollision(1, offset_x + Sin(f1)*45, offset_y + Cos(f1)*145, 2, offset_x + Sin(f2)*70 + Cos(f2)*100, offset_y + Cos(f2)*80)
PlaySound(1)
EndIf
;kollidiert 2 mit 3?
If SpriteCollision(2,offset_x + Sin(f2)*70 + Cos(f2)*100, offset_y + Cos(f2)*80, 3,offset_x + Sin(f3)*125, offset_y + Cos(f3)*50 - Sin(f3)*70)
PlaySound(2)
EndIf
Delay(1)
FlipBuffers()
Until Quit
EndIf
EndIf