"Handle" von Sprites neu definieren

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

"Handle" von Sprites neu definieren

Beitrag von Olafmagne »

Hallo,
ich habe da ein Problem, zu dem ich keine Lösung finde.

Es geht um folgendes:

Von BlitzBasic bin ich gewohnt, mit der Function HandleImage den Null-Punkt eines Images auf einen anderen Punkt setzen
zB ImageWidth(img)/2,ImageHeight(img),
womit der Null-Punkt In der Mitte x und unteren Rand y sitzt ein Zeichnen des Images wird nun diesen Punkt als Koordinate nehmen!

Giebt es eine Möglichkeit, soetwas in PB mit Sprites zu machen?
Das Image wird ständig gedreht so dass es quasi unmöglich ist,den Punkt "manuell" zu bestimmen

Für anregungen,Hilfe,DLL?,... wäre ich sehr Dankbar

Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Burstnibbler
Beiträge: 55
Registriert: 04.10.2008 12:10

Re: "Handle" von Sprites neu definieren

Beitrag von Burstnibbler »

Vorausgesetzt ich habe dein Problem richtig verstanden, würde ich es wahrscheinlich so lösen...

Code: Alles auswählen

EnableExplicit
;
#WIN = 0
#SPR = 0
#PNK = $FF00FF
;
Define.s sprSrc = GetCurrentDirectory() + "Examples\Sources\Data\Geebee2.bmp"
Define.i sprW, sprH, angle
;
InitSprite()
InitKeyboard()
;
OpenWindow(#WIN, 0, 0, 800, 600, "Foo", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#WIN), 0, 0, 800, 600)
;
TransparentSpriteColor(#PB_Default, #PNK)
LoadSprite(#SPR, sprSrc)
sprW = SpriteWidth(#SPR)
sprH = SpriteHeight(#SPR)
;
ClearScreen(#PNK)
DisplaySprite(#SPR, 0, 0)
GrabSprite(#SPR, 0, 0, sprW, sprH * 2)
sprW / 2
;
Repeat
  While WindowEvent() : Wend
  ExamineKeyboard()
  ;
  ClearScreen(0)
  RotateSprite(#SPR, angle, #PB_Absolute)
  DisplayTransparentSprite(#SPR, WindowMouseX(#WIN) - sprW, WindowMouseY(#WIN) - sprH)
  FlipBuffers()
  ; 
  angle = (angle + 2) % 360
  Delay(16)
Until (KeyboardPushed(#PB_Key_Escape))
;
Homer sagt: „In einer Welt die Verrückt spielt, ist nur ein Irrer wahrlich Geisteskrank.“
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: "Handle" von Sprites neu definieren

Beitrag von Olafmagne »

Bingo!

Das PB die images/Sprites um die Mitte Dreht hatte ich vergessen und bin von x,y(0,0) ausgegangen!

hab den Code etwas angepasst,
und das img verändert (höhe verdoppelt und das eigentliche bild soweit runter geschoben,bis der gewünschte Drehpunkt
in der mitte liegt.
Nun dreht 'et sich, wie'et soll!

Code: Alles auswählen

EnableExplicit
;

#PNK = $FF00FF
;
Define sprSrc$ = GetCurrentDirectory() + "Examples\Sources\Data\Geebee22.bmp"
Define.i sprW, sprH, angle
Define win,spr,bee
;
InitSprite()
InitKeyboard()
;
win=OpenWindow(#PB_Any, 0, 0, 800, 600, "", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(win), 0, 0, 800, 600)
;
TransparentSpriteColor(#PB_Default, #PNK)
spr=LoadSprite(#PB_Any, sprSrc$)
sprW = SpriteWidth(spr)
sprH = SpriteHeight(spr)
;
ClearScreen(#PNK)
DisplaySprite(spr, 0, 0)
bee=GrabSprite(#PB_Any, 0, 0, sprW, sprH)
sprW / 2
sprH/2
;
Repeat
  While WindowEvent() : Wend
  ExamineKeyboard()
  ;
  ClearScreen(0)
  RotateSprite(bee, angle, #PB_Absolute)
  DisplayTransparentSprite(bee, WindowMouseX(win) - sprW, WindowMouseY(win) - sprH)
  FlipBuffers()
  ; 
  angle = (angle + 2) % 360
  Delay(25)
Until (KeyboardPushed(#PB_Key_Escape))
;
Merci und , na gute Nacht

Olaf


Edit:

Ich sehe gerade ,das es ja mit einem angepasstem Image nicht mehr nötig ist,das Sprite erst zu zeichnen
und dann zu" grabben", es ist ja schon auf die doppelte grösse deändert worden!
Kann dann weg
Olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Antworten