Aktuelle Zeit: 12.11.2019 03:34

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 12:52 
Offline
Benutzeravatar

Registriert: 28.04.2017 11:21
Wohnort: Magdeburg
Hi :)

Ich brauche eure Hilfe. Ich habe ein Screen und ein Sprite und möchte mein Sprite zoomen. Das klappt auch. Aber ich möchte dass er mittig zoomt.
Mein Code
Code:
Define MainX = 100
Define MainY = 100
Define X
Define Y

InitSprite()
InitKeyboard()

LoadFont(1, "Arial", 10)

If OpenScreen(1920, 1080, 32, "")
  SetFrameRate(60)
 
  CreateSprite(1, 5000, 500)
  If StartDrawing(SpriteOutput(1))
    For X=0 To SpriteWidth(1)
      If X % 50 = 0
        DrawText(MainX+X, MainY+60, Str(X/50), RGB(255, 255, 255))
      EndIf
    Next
    StopDrawing()
  EndIf
 
  Repeat
    FlipBuffers()
    ClearScreen(RGB(0, 0, 0))
   
    DisplaySprite(1, MainX, MainY)
   
    ExamineKeyboard()
   
    If KeyboardPushed(#PB_Key_Left)
      MainX+10
    EndIf
    If KeyboardPushed(#PB_Key_Right)
      MainX-10
    EndIf
    If KeyboardPushed(#PB_Key_Up)
      ;MainX-5 ; <<< reicht nicht aus, irgendeine Berechnungsformel brauche ich
      ZoomSprite(1, SpriteWidth(1)+20, SpriteHeight(1)+2)
    EndIf
    If KeyboardPushed(#PB_Key_Down)
      ;MainX+5 ; <<< reicht nicht aus, irgendeine Berechnungsformel brauche ich
      ZoomSprite(1, SpriteWidth(1)-20, SpriteHeight(1)-2)
    EndIf
  Until KeyboardReleased(#PB_Key_Escape)
EndIf


Erklärung : Mit den Tasten RECHTS und LINKS bewegt man das Sprite hin und her und mit den Tasten OBEN und UNTEN zoomt man rein und raus. Wenn ich zoome dann zommt er relativ auf 0,0. Ich möchte aber dass er auf aktuelles MainX zoomt so dass er immer mittig zoomt. Wie mache ich das? Ich bin zu dumm um mir eine Berechnungsformel auszudenken. Ich brauche daher eure Hilfe. :)

_________________
PW für alle: 4n0nym0us


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 12:55 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Wenn du das Sprite um 20 Pixel nach rechts vergrößerst, musst du es einfach 10 Pixel weiter links anzeigen, also von MainX 10 abziehen. Also immer die Hälfte.
Würde man den Code etwas umstrukturieren, könnte man es vielleicht etwas eleganter lösen, aber vielleicht reicht dir dieser Tipp ja schon.

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 13:00 
Offline
Benutzeravatar

Registriert: 28.04.2017 11:21
Wohnort: Magdeburg
Danke NicTheQuick aber das klappt nicht. Das habe ich auch schon probiert. Ich habe beim Zoom MainX-10 eingefügt aber wenn du es startest siehst du beim ersten zoomen sofort dass das Sprite sich zur Seite bewegt. Viel schneller als der Zoom selbst. Da ist auf jeden Fall eine Formel notwendig. :(

_________________
PW für alle: 4n0nym0us


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 13:22 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Das Sprite wird so genau mittig gezoomt. Deine Mitte ist am Anfang aber außerhalb des Bildschirms. Was du aber offfenbar willst, ist das Sprite aus der Mitte des Bildschirms heraus zu zoomen. Das ist natürlich etwas komplizierter. Ich habe noch die Maus dazu genommen. So kannst du genau an die Stelle zoomen, auf die die Maus zeigt:
Code:
Define.d MainX.d = 0, MainY.d = 100
Define X
Define Y

InitSprite()
InitKeyboard()
InitMouse()

Define.d zoomPointX.d = 1920.0 / 2.0
Define.d spr


LoadFont(1, "Arial", 10)
OpenWindow(0, 0, 0, 1920, 1080, "test", #PB_Window_BorderLess)

If OpenWindowedScreen(WindowID(0), 0, 0, 1920, 1080)
   ;SetFrameRate(60)
   
   CreateSprite(1, 5000, 500)
   If StartDrawing(SpriteOutput(1))
      For X=0 To SpriteWidth(1)
         If X % 50 = 0
            DrawText(MainX+X, MainY+60, Str(X/50), RGB(255, 255, 255))
         EndIf
      Next
      StopDrawing()
   EndIf
   
   Repeat
      FlipBuffers()
      ClearScreen(RGB(0, 0, 0))
      
      DisplaySprite(1, MainX, MainY)
      
      ExamineKeyboard()
      ExamineMouse()
      
      zoomPointX = MouseX()
      If StartDrawing(ScreenOutput())
         LineXY(zoomPointX, 0, zoomPointX, 1080, $ffffff)
         StopDrawing()
      EndIf
      
      If KeyboardPushed(#PB_Key_Left)
         MainX+10
      EndIf
      If KeyboardPushed(#PB_Key_Right)
         MainX-10
      EndIf
      If KeyboardPushed(#PB_Key_Up)
         MainX - 20 * (zoomPointX - MainX) / SpriteWidth(1)
         ZoomSprite(1, SpriteWidth(1)+20, SpriteHeight(1)+2)
      EndIf
      If KeyboardPushed(#PB_Key_Down)
         MainX + 20 * (zoomPointX - MainX) / SpriteWidth(1)
         ZoomSprite(1, SpriteWidth(1)-20, SpriteHeight(1)-2)
      EndIf
   Until KeyboardReleased(#PB_Key_Escape)
EndIf
Bestimmt kannst du daraus noch die Y-Achse ableiten.

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 13:46 
Offline
Benutzeravatar

Registriert: 28.04.2017 11:21
Wohnort: Magdeburg
Danke NicTheQuick das klappt nun. Diese Formel habe ich gebraucht. Weil ich keine Maus brauchte habe ich nehme ich für zoomPointX einfach die Hälfte der Screen Breite. Klappt wunderbar danke :)

_________________
PW für alle: 4n0nym0us


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 13:55 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Ich persönlich finde es ja schöner, wenn man einen Zoomfaktor hat statt einer absoluten Vergrößerung in Pixel. Wie gefällt dir das?
Code:
Define.d MainX.d = 0, MainY.d = 100
Define X
Define Y

InitSprite()
InitKeyboard()
InitMouse()

Define.d zoomPointX.d = 1920.0 / 2.0
Define.d zoomFactor.d = 1.01
Define.d spriteWidth.d, spriteHeight.d, diffWidth.d
Define.d spr


LoadFont(1, "Arial", 10)
OpenWindow(0, 0, 0, 1920, 1080, "test", #PB_Window_BorderLess)

If OpenWindowedScreen(WindowID(0), 0, 0, 1920, 1080)
   ;SetFrameRate(60)
   
   CreateSprite(1, 5000, 500)
   If StartDrawing(SpriteOutput(1))
      For X=0 To SpriteWidth(1)
         If X % 50 = 0
            DrawText(MainX+X, MainY+60, Str(X/50), RGB(255, 255, 255))
         EndIf
      Next
      StopDrawing()
   EndIf
   
   spriteWidth = SpriteWidth(1)
   spriteHeight = SpriteHeight(1)
   
   Repeat
      FlipBuffers()
      ClearScreen(RGB(0, 0, 0))
      
      DisplaySprite(1, MainX, MainY)
      
      ExamineKeyboard()
      ExamineMouse()
      
      zoomPointX = MouseX()
      If StartDrawing(ScreenOutput())
         LineXY(zoomPointX, 0, zoomPointX, 1080, $ffffff)
         StopDrawing()
      EndIf
      
      If KeyboardPushed(#PB_Key_Left)
         MainX+10
      EndIf
      If KeyboardPushed(#PB_Key_Right)
         MainX-10
      EndIf
      If KeyboardPushed(#PB_Key_Up)
         spriteWidth * zoomFactor
         spriteHeight * zoomFactor
         MainX - (zoomFactor - 1.0) * (zoomPointX - MainX)
         ZoomSprite(1, spriteWidth, spriteHeight)
      EndIf
      If KeyboardPushed(#PB_Key_Down)
         spriteWidth / zoomFactor
         spriteHeight / zoomFactor
         MainX + (zoomFactor - 1.0) * (zoomPointX - MainX)
         ZoomSprite(1, spriteWidth, spriteHeight)
      EndIf
   Until KeyboardReleased(#PB_Key_Escape)
EndIf

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 14:04 
Offline
Benutzeravatar

Registriert: 28.04.2017 11:21
Wohnort: Magdeburg
Auch sehr schön :)

_________________
PW für alle: 4n0nym0us


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Sprite zentriert zoomen
BeitragVerfasst: 18.07.2017 14:14 
Offline
Benutzeravatar

Registriert: 28.04.2017 11:21
Wohnort: Magdeburg
NicTheQuick hat geschrieben:
Bestimmt kannst du daraus noch die Y-Achse ableiten.

Ja das schaffe ich, ich bin ja nicht funkheld. :mrgreen:

_________________
PW für alle: 4n0nym0us


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye