Normales Sprite zoomen ? Kein 3d

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
mull
Beiträge: 34
Registriert: 13.12.2005 20:18
Kontaktdaten:

Normales Sprite zoomen ? Kein 3d

Beitrag von mull »

Wie bekomme ich ein normales 2D Sprite größer/kleiner ?
Finde keinen Befehl dafür, außer bei Image und Srite3D.
Benutzeravatar
Ypser
XMas-Contest-Gewinner '03
Beiträge: 128
Registriert: 29.08.2004 14:35
Computerausstattung: Win7
Wohnort: Ingelheim
Kontaktdaten:

Beitrag von Ypser »

Geht nicht, soweit ich weiss.

Aber wieso nicht ein Sprite3D benutzen?
Bild
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

du kommst aber an den drawingbuffer ran, sowas kannst du also selbst schreiben.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Beitrag von SoS »

Stefan hat geschrieben:Hallo

Hier ein Lösungsvorschlag,der DirectDraw benutzt:

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)

Gruß
Stefan
Benutzeravatar
mull
Beiträge: 34
Registriert: 13.12.2005 20:18
Kontaktdaten:

Beitrag von mull »

Danke, klappt prima.
Hab es noch so umgeschrieben, das das Orginal Sprite nicht geändert wird.
Eigendlich sollte so ein Haus + Hof Befehl doch Standardmäßig enthalten sein.
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Das wird dir bei PB öffter passieren, dass es einen Haus + Hof Befehl nicht gibt. Dann muss man halt zB in der Purearea oder im Board (den post gabs schon mal) suchen.
Benutzeravatar
AndyX
Beiträge: 1272
Registriert: 17.12.2004 20:10
Wohnort: Niederösterreich
Kontaktdaten:

Beitrag von AndyX »

Bei C wirste nichtmal nen Delay Befehl vorgefertigt finden :wink:
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

Sleep_()? Naja gut, du musst windows.h mit einbinden, hast aber dann
trotzdem ein Befehl um das Programm kurzzeitig zu stoppen.
Bild
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

mull hat geschrieben:Eigendlich sollte so ein Haus + Hof Befehl doch Standardmäßig enthalten sein.
Naja, dann kommen aber wieder 1000. andere leute die den Befehl xyz haben wollen. Man sollte nie vergessen, dass es sich um eine Programmiersprache handelt. Und da ist es ja der zweck zu Programmieren was es nicht gibt :wink:

Lukas
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
Zaphod
Beiträge: 2875
Registriert: 29.08.2004 00:40

Beitrag von Zaphod »

AndyX:

Sleep? Allegro? SDL? DircectX? Clanlib?

finde dein post ziemlich unreflektiert...
Antworten