Guten Tag,
ich bin momentan ein wenig mit PyGame am rumspielen. Hab nun einen Fade In Text gebastelt der langsam vom oben ins Bild reinfährt und in der Mitte stehen bleibt.
Nun möchte ich aber gerne das dieser Text zuerst schnell und dann immer langsamer wird bis er endlich am Ziel ankommt. Dafür suche ich nun einen Algorithmus. Ich weiß zB wie das in einem Graphen aussehen würde, aber ich bin im Internet nicht fündig geworden. Kann mir jemand einen Tipp und eine kleine Starthilfe geben?
Wie muss das ungefähr aussehen?
Was ich versucht habe...
Ich habe eine Geschwindigkeit "speed" angegeben. Den speed habe ich dann zB mit 0.75 immer multipliziert, Das Ergebnis habe ich genutzt um den Text auf der Y Achse zu verschieben. Aber leider war das vom Endergbnis her eine unschöne Lösung, da es auch nicht zum gewünschten Ergebnis führte.
Suche einen Slow Down Algorithmus
@Douchbag: Wenn Start- und Endpunkt bekannt sind, würde ich ja einfach etwas schreiben was auf einer halben Sinuskurve basiert. Einfach und effektiv.
Simples Beispiel:
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from math import pi as PI, sin
import pygame
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
def main():
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((800, 600))
screen_rect = screen.get_rect()
text = (
pygame.font.Font(None, 64).render('www.python-forum.de', True, WHITE)
)
text_rect = text.get_rect()
text_rect.centerx = screen_rect.centerx
distance = screen_rect.centery + text_rect.centery
step_count = 100
step_number = None
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
return
elif event.type == pygame.KEYUP and event.key == pygame.K_SPACE:
if step_number is None:
step_number = 0
if step_number is not None:
if step_number < step_count:
text_rect.centery = (
screen_rect.centery
- (1 - sin((PI / 2) / step_count * step_number)) * distance
)
screen.fill(BLACK)
screen.blit(text, text_rect)
step_number += 1
else:
step_number = None
pygame.display.update()
clock.tick(30)
if __name__ == '__main__':
main()