eine sprite in ein sprite packen
eine sprite in ein sprite packen
hallo, ich habe ein sprites, welches ein auto darstellt ohne räder.
jetzt möchte ich 2tes sprites, welches nur ein teil der fläche einnimmt da reinkopieren. kriege das nicht hin.
oder geht das nicht?
wird das erste spritebild total überschrieben?
mfg
jetzt möchte ich 2tes sprites, welches nur ein teil der fläche einnimmt da reinkopieren. kriege das nicht hin.
oder geht das nicht?
wird das erste spritebild total überschrieben?
mfg
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
hier ein einfaches beispiel, welches nicht funktioniert.
ich möchte das zweite sprite mit im ersten sprite sehen, weil ich es ja dort reingekopiert habe. da das zweite sprite kleiner ist, müsste man doch jetzt beide flächen sehen.
mfg
ich möchte das zweite sprite mit im ersten sprite sehen, weil ich es ja dort reingekopiert habe. da das zweite sprite kleiner ist, müsste man doch jetzt beide flächen sehen.
mfg
Code: Alles auswählen
Global breite1.f ,hoehe1.f,breite2.f ,hoehe2.f
InitSprite()
InitSprite3D()
OpenWindow(0,0,0,800,600,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),5,5,500,500,0,0,0)
CreateSprite(0,500,500,#PB_Sprite_Texture) ; grundfläche gelb
CreateSprite3D(0,0)
StartDrawing(SpriteOutput(0))
Box(0,0,500,500,RGB(255,255,0))
StopDrawing()
breite1=80
hoehe1=80
CreateSprite(1,breite1,hoehe1,#PB_Sprite_Texture) ; erstes sprite 80x80
CreateSprite3D(1, 1)
StartDrawing(SpriteOutput(1))
Box(0,0,breite1,hoehe1,RGB(255,0,0))
StopDrawing()
breite2=40
hoehe2=40
CreateSprite(2,breite2,hoehe2,#PB_Sprite_Texture) ; zweites sprite 40x40
CreateSprite3D(2, 2)
StartDrawing(SpriteOutput(2))
Box(0,0,breite1,hoehe1,RGB(0,255,0))
StopDrawing()
TransparentSpriteColor(0, RGB(255, 0, 255))
TransparentSpriteColor(1, RGB(255, 0, 255))
TransparentSpriteColor(2, RGB(255, 0, 255))
CopySprite (2,1) ; zweites sprite in das erste
Repeat
Event.l = WindowEvent()
DisplaySprite(0, 0,0)
DisplaySprite(1, 50,50) ; jetzt möchte ich das zweite mit im ersten sprite zusammen sehen
FlipBuffers()
Until Event = #PB_Event_CloseWindow
End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
ja, ne, Denkfehler.
ich geb zu, die Hilfe ist ungenau formuliert.
ergänze mal diese drei zeilen in deinem code:
ich geb zu, die Hilfe ist ungenau formuliert.
ergänze mal diese drei zeilen in deinem code:
Code: Alles auswählen
CopySprite (2,1) ; zweites sprite in das erste
breite3 = SpriteWidth (1)
hoehe3 = SpriteHeight (1)
Debug "Das neue Sprite ist " + Str(breite3) + "pix breit und " + Str(hoehe3) + "pix hoch."
Repeat
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
so, hab dir mal ein Beispiel gezimmert...
Code: Alles auswählen
InitSprite()
InitSprite3D()
OpenWindow(0,0,0,800,600,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),5,5,500,500,0,0,0)
TransparentSpriteColor( #PB_Default, RGB(255, 0, 255)) ; vorab für alle folgenden
CreateSprite(0,500,500,#PB_Sprite_Texture) ; grundfläche gelb
CreateSprite3D(0,0)
StartDrawing(SpriteOutput(0))
Box(0,0,500,500,RGB(224,192,0))
StopDrawing()
breite1=160
hoehe1=160
CreateSprite(1,breite1,hoehe1,#PB_Sprite_Texture) ; erstes sprite 160x160
CreateSprite3D(1, 1)
StartDrawing(SpriteOutput(1))
Box(0,0,breite1,hoehe1,RGB(255,0,255)) ; Fläche transparent
For n=20 To 1 Step -1
Circle( 80, 80, 4*n, RGB(0, 255-8*n, 0))
Next
StopDrawing()
breite2=40
hoehe2=40
CreateSprite(2,breite2,hoehe2,#PB_Sprite_Texture) ; zweites sprite 40x40
CreateSprite3D(2, 2)
StartDrawing(SpriteOutput(2))
Box(0,0,breite1,hoehe1,RGB(255,0,255)) ; Fläche transparent
For n=20 To 1 Step -1
Circle( 20, 20, n, RGB(0, 0, 255-8*n))
Next
StopDrawing()
;*** zweites sprite in das erste
UseBuffer(1) ; Sprite #1 als Ausgabebuffer benutzen
DisplayTransparentSprite(2, 80, 20) ; Sprite #2 hinein darstellen
UseBuffer(#PB_Default) ; Ausgabe wieder auf Screenbuffer
Repeat
Event.l = WindowEvent()
DisplaySprite(0, 0,0)
DisplayTransparentSprite(1, 50,50) ; voilá
FlipBuffers()
Until Event = #PB_Event_CloseWindow
End
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
warum rotiert dieses sprite nicht : RotateSprite3D(leerspr1,winkel,0), wenn ich dies dann wieder damit darstellen möchte: DisplayTransparentSprite(leerspr1, 150,50)
ich habe ein weissen untergrund, darin habe ich ein recheckiges sprite gepackt mit usebuffer und möchte nun das hauptsprite(weisse sprite) drehen. es dreht nicht.
ich habe ein weissen untergrund, darin habe ich ein recheckiges sprite gepackt mit usebuffer und möchte nun das hauptsprite(weisse sprite) drehen. es dreht nicht.
Code: Alles auswählen
Global winkel.f,winkeld.f
Global leerspr1.l=0
Global hintergrund1.l=1
Global chassic1.l=2
Global leerspr1_bh.w
InitSprite()
InitSprite3D()
OpenWindow(0,0,0,800,600,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),5,5,500,500,0,0,0)
TransparentSpriteColor( #PB_Default, RGB(255, 0, 255))
CreateSprite(hintergrund1,500,500,#PB_Sprite_Texture)
CreateSprite3D(hintergrund1,hintergrund1)
StartDrawing(SpriteOutput(hintergrund1))
Box(0,0,500,500,RGB(224,192,0))
StopDrawing()
leerspr1_bh=120
CreateSprite(leerspr1,leerspr1_bh,leerspr1_bh,#PB_Sprite_Texture)
CreateSprite3D(leerspr1, leerspr1)
StartDrawing(SpriteOutput(leerspr1))
Box(0,0,leerspr1_bh,leerspr1_bh,RGB(255,255,255))
StopDrawing()
CreateSprite(chassic1,50,80,#PB_Sprite_Texture)
CreateSprite3D(chassic1, chassic1)
StartDrawing(SpriteOutput(chassic1))
Box(0,0,50,80,RGB(255,0,0))
StopDrawing()
UseBuffer(leerspr1)
DisplayTransparentSprite(chassic1, 35,20)
UseBuffer(#PB_Default)
Repeat
Event.l = WindowEvent()
If GetAsyncKeyState_(#VK_RIGHT)
winkel=winkel+1
RotateSprite3D(leerspr1,winkel,0)
Debug winkel
ElseIf GetAsyncKeyState_(#VK_LEFT)
winkel=winkel-1
RotateSprite3D(leerspr1,winkel,0)
Debug winkel
EndIf
DisplaySprite(hintergrund1, 0,0)
DisplayTransparentSprite(leerspr1, 150,50)
FlipBuffers()
Until Event = #PB_Event_CloseWindow
End
weil DisplayTransparentSprite(leerspr1, 150,50) für 2D ist
für 3D (RotateSprite3D) dann bitte DisplaySprite3D(leerspr1, 150,50) verwenden, transparenz ist da automatisch.
für 3D (RotateSprite3D) dann bitte DisplaySprite3D(leerspr1, 150,50) verwenden, transparenz ist da automatisch.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
jetzt wollte ich in dem sprite "leerspr1" , das gedrehte sprite "chassic1" mit
usebuffer reinbringen. klappt nicht.
das leerspr1 wird aber dargestellt , aber ohne innenleben.
bitte um hilfe.
mfg
[/quote]
usebuffer reinbringen. klappt nicht.
das leerspr1 wird aber dargestellt , aber ohne innenleben.
bitte um hilfe.
mfg
Code: Alles auswählen
Global winkel.f,winkeld.f
Global leerspr1.l=0
Global hintergrund1.l=1
Global chassic1.l=2
Global leerspr1_bh.w
InitSprite()
InitSprite3D()
OpenWindow(0,0,0,800,600,"sprites!",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),5,5,500,500,0,0,0)
TransparentSpriteColor( #PB_Default, RGB(255, 0, 255))
CreateSprite(hintergrund1,500,500,#PB_Sprite_Texture)
CreateSprite3D(hintergrund1,hintergrund1)
StartDrawing(SpriteOutput(hintergrund1))
Box(0,0,500,500,RGB(224,192,0))
StopDrawing()
leerspr1_bh=120
CreateSprite(leerspr1,leerspr1_bh,leerspr1_bh,#PB_Sprite_Texture)
CreateSprite3D(leerspr1, leerspr1)
StartDrawing(SpriteOutput(leerspr1))
Box(0,0,leerspr1_bh,leerspr1_bh,RGB(255,255,255))
StopDrawing()
CreateSprite(chassic1,50,80,#PB_Sprite_Texture)
CreateSprite3D(chassic1, chassic1)
StartDrawing(SpriteOutput(chassic1))
Box(0,0,50,80,RGB(255,0,0))
StopDrawing()
Repeat
Event.l = WindowEvent()
If GetAsyncKeyState_(#VK_RIGHT)
winkel=winkel+1
RotateSprite3D(chassic1,winkel,0)
UseBuffer(leerspr1)
Start3D()
DisplaySprite3D(chassic1, 35,20)
Stop3D()
UseBuffer(#PB_Default)
ElseIf GetAsyncKeyState_(#VK_LEFT)
winkel=winkel-1
RotateSprite3D(chassic1,winkel,0)
UseBuffer(leerspr1)
Start3D()
DisplaySprite3D(chassic1, 35,20)
Stop3D()
UseBuffer(#PB_Default)
EndIf
DisplaySprite(hintergrund1, 0,0)
Start3D()
DisplaySprite3D(leerspr1, 150,50)
Stop3D()
FlipBuffers()
Until Event = #PB_Event_CloseWindow
End
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
probier mal ob es funktioniert, wenn du das RotateSprite3D dierekt vorm DisplaySprite3D ausführst,
also wenn der selbe buffer aktiv ist im selbem Start3D/Stop3D-Block.
(irgendwie wundert mich, dass es das nicht anmeckert)
irgendwas war da aber auch noch, mit 3D operationen und alternativen buffern,
ich meine mich zu erinnern dass man nicht alle kombinationen benutzen kann,
bin aber nicht mehr sicher.
also wenn der selbe buffer aktiv ist im selbem Start3D/Stop3D-Block.
(irgendwie wundert mich, dass es das nicht anmeckert)
irgendwas war da aber auch noch, mit 3D operationen und alternativen buffern,
ich meine mich zu erinnern dass man nicht alle kombinationen benutzen kann,
bin aber nicht mehr sicher.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.