Wie kann ich ein Sprite Strecken???
danke schonmal im Voraus





Code: Alles auswählen
Procedure Resizesprite(endsprite,pfad$,breite,weite)
LoadImage(100,pfad$)
ResizeImage(100,breite,weite)
SaveImage(100,"rezize.bmp")
LoadSprite(endsprite,"rezize.bmp")
EndProcedure
Code: Alles auswählen
TransformSprite3D(#Sprite3D, x1, y1, [z1], x2, y2, [z2], x3, y3, [z3], x4, y4, [z4])
Tzzz, tzzz...PMV hat geschrieben:Für Sprites ... wie wäre es mit der Sprite3D Lib, oder kommt die für dich nicht in Frage?
^^müsstest nur wissen, wie man damit umgeht, aber dafür ist die PB Hilfe ja daCode: Alles auswählen
TransformSprite3D(#Sprite3D, x1, y1, [z1], x2, y2, [z2], x3, y3, [z3], x4, y4, [z4])
![]()
3DSprites sind leider dadurch etwas beschränkt, dass sie immer gleiche Proportionen haben müssen, also 32 x 32, 64 x 64, 128 x 128. Wenn man beliebig große Sprites vergrößern oder verkleinern will, hätte man da auf manchen Systemen ein problem da es da zu Fehlern kommen kann wenn die Größen nicht korrekt sind.
Code: Alles auswählen
#DDBLT_WAIT=16777216
Structure PB_Sprite
Sprite.l
Width.w
Height.w
Depth.w
Mode.w
FileName.l
RealWidth.w
RealHeight.w
ClipX.w
ClipY.w
EndStructure
Procedure ResizeSprite(Sprite,Width,Height);Gibt bei Fehlern 0 zurück.
If Width<=0 Or Height<=0:ProcedureReturn 0:EndIf
*Sprite.PB_Sprite=IsSprite(Sprite)
If *Sprite=0:ProcedureReturn 0:EndIf
*DDS.IDirectDrawSurface7=*Sprite\Sprite
If *DDS=0:ProcedureReturn 0:EndIf
*DDS\GetDDInterface(@*DD.IDirectDraw7)
If *DD=0:ProcedureReturn 0:EndIf
DDSD=AllocateMemory(124)
If DDSD=0:ProcedureReturn 0:EndIf
PokeL(DDSD,124)
If *DDS\GetSurfaceDesc(DDSD):FreeMemory(DDSD):ProcedureReturn 0:EndIf
PokeL(DDSD+8,Height)
PokeL(DDSD+12,Width)
If *DD\CreateSurface(DDSD,@*DDS2.IDirectDrawSurface7,0):FreeMemory(DDSD):ProcedureReturn 0:EndIf
rect.RECT
rect\left=0
rect\right=Width
rect\top=0
rect\bottom=Height
If *DDS2\Blt(rect,*DDS,0,#DDBLT_WAIT,0):FreeMemory(DDSD):*DDS\Release():ProcedureReturn 0:EndIf
FreeMemory(DDSD)
*DDS\Release()
*Sprite\Sprite=*DDS2
*Sprite\Width=Width
*Sprite\Height=Height
*Sprite\RealWidth=Width
*Sprite\RealHeight=Height
*Sprite\ClipX=0
*Sprite\ClipY=0
ProcedureReturn *DDS2
EndProcedure
;Test:
InitSprite()
InitKeyboard()
OpenScreen(800,600,16,"ResizeSprite()")
CreateSprite(1,128,128)
StartDrawing(SpriteOutput(1))
For M=0 To 500
Circle(Random(128),Random(128),10,Random($FFFFFF))
Next
BackColor(0,0,0)
FrontColor(255,255,0)
DrawingFont(GetStockObject_(#ANSI_VAR_FONT))
DrawText("Press enter to quit.")
StopDrawing()
DisplaySprite(1,0,0)
ResizeSprite(1,256,128)
DisplaySprite(1,128,0)
ResizeSprite(1,256,256)
DisplaySprite(1,384,0)
ResizeSprite(1,100,100)
DisplaySprite(1,640,0)
FlipBuffers()
Repeat
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Return)