Aktuelle Zeit: 26.05.2018 13:46

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zoom
BeitragVerfasst: 08.12.2017 17:34 
Offline

Registriert: 29.04.2010 22:50
Hallo!
Ich habe ein kleines Problem mit Sprites. Der Sprite soll wenn er nach Oben geht seine Größe verändern und kleiner werden, so das ein "3d" Effekt ensteht. Und natürlich wieder größer werden wenn er nach Unten "Vorne" kommt. Ich weis das es mit ZoomSprite geht, aber irgendwie sieht das bei mir nicht sauber aus. Darum habe ich mal in den Quelltext das Zoomen rausgelassen, in der Hoffnung das einer von euch vielleicht eine saubere Animation hin bekommt.

Code:
InitSprite()
InitKeyboard()
OpenScreen(640,480,32,"")
SetFrameRate(60)

Sprite=CreateSprite(#PB_Any,200,100)

StartDrawing(SpriteOutput(Sprite))
   Box(0,0,SpriteWidth(Sprite),SpriteHeight(Sprite),RGB(255,0,0))
StopDrawing()

Grad = 0
Mittelpunkt_x = 640/2
Mittelpunkt_y = 480/2
Abstand_x = 170
Abstand_y = 170

Repeat
  ExamineKeyboard()
  ClearScreen(RGB(0,0,0))
 
  If Grad >0
    Grad = Grad - 1
  Else
    Grad = 360
  EndIf
 
  Rota_x = (Abstand_x * Cos(Grad * (2*#PI/360)))
  Pos_x = Mittelpunkt_x + Rota_x
 
  Rota_y = (Abstand_y * Sin(Grad * (2*#PI/360)))
  Pos_y = Mittelpunkt_y + Rota_y
   
  DisplayTransparentSprite(Sprite, Pos_x - SpriteWidth(Sprite)/2 , Pos_y - SpriteHeight(Sprite)/2 )
 
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zoom
BeitragVerfasst: 08.12.2017 19:09 
Offline

Registriert: 13.08.2016 12:53
hemm auch wenn das anderes herum ist meinst du das ?

denn leider weiß ich nicht was du mit sauber meinst.... evtl. hilft´s ja trozdem

ps: warum machst du das ganze eigentlich nicht in 3 d ? desweiteren wenn ich mich nicht vertue wird es besser wenn es kein kreis ist sondern eine ei form ist ...


Code:
InitSprite()
InitKeyboard()
;hir habe ich auch etwas gändert ...
OpenScreen(640,480,32,"",#PB_Screen_NoSynchronization)
SetFrameRate(160)

Sprite=CreateSprite(#PB_Any,200,100)

StartDrawing(SpriteOutput(Sprite))
   Box(0,0,SpriteWidth(Sprite),SpriteHeight(Sprite),RGB(255,0,0))
StopDrawing()

Grad = 0
Mittelpunkt_x = 640/2
Mittelpunkt_y = 480/2
Abstand_x = 170
Abstand_y = 170

; orgnial gröse auslesen (damit du nicht dynamisch weite das ganze nutzen kannst...  und nicht die zahlen nutezen must von 200 zu 100)
o_SpriteWidth=SpriteWidth(Sprite)
o_SpriteHeight=SpriteHeight(Sprite)

Repeat
  ExamineKeyboard()
  ClearScreen(RGB(0,0,0))
 
  If Grad >0
    Grad = Grad - 1
  Else
    Grad = 360
  EndIf
 
  Rota_x = (Abstand_x * Cos(Grad * (2*#PI/360)))
  Pos_x = Mittelpunkt_x + Rota_x
 
  Rota_y = (Abstand_y * Sin(Grad * (2*#PI/360)))
  Pos_y = Mittelpunkt_y + Rota_y
  ;berechnung des faktors des zomms und der veränderung bei jeder schleife neu berehnet evtl musst du die werte anpassen...
    faktor=((ScreenHeight()/2)-Pos_y)/2
    Debug faktor
    ZoomSprite(Sprite, o_SpriteWidth+(faktor), o_SpriteHeight+(faktor))   
    If facktor>0
      Delay(facktor)
    EndIf
   
   DisplayTransparentSprite(Sprite, Pos_x - SpriteWidth(Sprite)/2 , Pos_y - SpriteHeight(Sprite)/2 )
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zoom
BeitragVerfasst: 09.12.2017 20:18 
Offline
Benutzeravatar

Registriert: 20.04.2006 09:50
Code:
InitSprite()
InitKeyboard()
;OpenScreen(640,480,32,"")
OpenWindow(0, 0, 0, 640, 480, "", #PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480)
SetFrameRate(60)

Sprite=CreateSprite(#PB_Any,200,100)

StartDrawing(SpriteOutput(Sprite))
   Box(0,0,SpriteWidth(Sprite),SpriteHeight(Sprite),RGB(255,0,0))
StopDrawing()

Grad = 0
Mittelpunkt_x = 640/2
Mittelpunkt_y = 480/2
Abstand_x = 170
Abstand_y = 170 * 0.5             ; ellipse movement

Repeat
  ExamineKeyboard()
  While WindowEvent() : Wend
  ClearScreen(RGB(0,0,0))
 
  If Grad > 0
    Grad = Grad - 2
  Else
    Grad = 360
  EndIf
 
  Rota_x = (Abstand_x * Cos(Grad * (2*#PI/360)))
  Pos_x = Mittelpunkt_x + Rota_x
 
  Rota_y = (Abstand_y * Sin(Grad * (2*#PI/360)))
  Pos_y = Mittelpunkt_y + Rota_y
 
  Define GradRotated
  GradRotated = Grad
  GradRotated = GradRotated + 270 ; rotate 3/4, like rotate -90° and add 360 to keep number positive for the modulo operation
  GradRotated = GradRotated % 360 ; clip, i.e. convert 380 to 20
  Define f.f                      ; zoom factor, will be in range 0.0 .. 1.0
  f = (GradRotated) - 180         ; convert from range 360..180..0 to range 180..0..-180
  f * 2                           ; convert to range 360..0..-360
  f = Abs(f)                      ; convert to range 360..0..360
  f = f / 360                     ; normalize to 1..0..1
 
  zoomW = 200 * f
  zoomH = 100 * f
  ZoomSprite(Sprite, zoomW, zoomH)
 
  DisplayTransparentSprite(Sprite, Pos_x - SpriteWidth(Sprite)/2 , Pos_y - SpriteHeight(Sprite)/2, 55+200*f)
 
  FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)

_________________
my pb stuff..
Bild..jedenfalls war das mal so.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zoom
BeitragVerfasst: 09.12.2017 22:47 
Offline
Benutzeravatar

Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten
Hallo,
sieht das so nicht schöner aus?
Code:
;Sprite Ellipse
;#Openscreend=#True
InitKeyboard() :   InitSprite()
Bildschirm=ExamineDesktops()-1
CompilerIf Defined(Openscreend, #PB_Constant)
  Bildschirm=0
  OpenScreen(DesktopWidth(Bildschirm),DesktopHeight(Bildschirm),DesktopDepth(Bildschirm),"")
CompilerElse
  OpenWindow(0, DesktopX(Bildschirm), DesktopY(Bildschirm),DesktopWidth(Bildschirm),
             DesktopHeight(Bildschirm), "", #PB_Window_BorderLess)
  OpenWindowedScreen(WindowID(0), 0, 0, DesktopWidth(Bildschirm), DesktopHeight(Bildschirm))
CompilerEndIf 
SetFrameRate(DesktopFrequency(Bildschirm))
xSprite=Int(DesktopWidth(Bildschirm))/3.2
ySprite=Int(DesktopHeight(Bildschirm))/4.8
Sprite=CreateSprite(#PB_Any,xSprite,ySprite)

StartDrawing(SpriteOutput(Sprite))
   Box(0,0,SpriteWidth(Sprite),SpriteHeight(Sprite),RGB(255,0,0))
StopDrawing()

Grad = 0
Mittelpunkt_x = DesktopWidth(Bildschirm)/2
Mittelpunkt_y = DesktopHeight(Bildschirm)/2
Abstand_x = DesktopWidth(Bildschirm)/3.5
Abstand_y = DesktopHeight(Bildschirm)/2             ; ellipse movement
fertig=#False
Repeat
  ExamineKeyboard() : If KeyboardPushed(#PB_Key_Escape) : fertig=#True : EndIf
  CompilerIf Not(Defined(Openscreend, #PB_Constant))
    Event=WindowEvent():
    While Event : If Event=#PB_Event_CloseWindow: fertig=#True: EndIf :  Event=WindowEvent() : Wend
  CompilerEndIf
  ClearScreen(RGB(0,0,$30))
 
  If Grad > 0
    Grad = Grad - 2
  Else
    Grad = 360
  EndIf
 
  Rota_x = (Abstand_x * Cos(Grad * (2*#PI/360)))
  Pos_x = Mittelpunkt_x + Rota_x
 
  Rota_y = (Abstand_y * Sin(Grad * (2*#PI/360)))
  Pos_y = Mittelpunkt_y + Rota_y
 
  Define GradRotated
  GradRotated = Grad
  GradRotated = GradRotated + 270 ; rotate 3/4, like rotate -90° and add 360 to keep number positive for the modulo operation
  GradRotated = GradRotated % 360 ; clip, i.e. convert 380 to 20
  Define f.f                      ; zoom factor, will be in range 0.0 .. 1.0
  f = (GradRotated) - 180         ; convert from range 360..180..0 to range 180..0..-180
  f * 2                           ; convert to range 360..0..-360
  f = Abs(f)                      ; convert to range 360..0..360
  f = f / 360                     ; normalize to 1..0..1
 
  zoomW = xSprite * f
  zoomH = ySprite * f
  ZoomSprite(Sprite, zoomW, zoomH)
 
  DisplayTransparentSprite(Sprite, Pos_x - SpriteWidth(Sprite)/2 , Pos_y - SpriteHeight(Sprite)/2, 55+200*f)
 
  FlipBuffers()
Until fertig

_________________
PB Spickzettel

Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im sichtbaren Universum.
Bitte Frage fragen.
Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Zoom
BeitragVerfasst: 18.12.2017 22:00 
Offline

Registriert: 29.04.2010 22:50
Danke, ihr habt mir sehr geholfen :)


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

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


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