2017-04-02 12 views
1

pygameで振動する四角形を描こうとしています。pygameでmath.piが期待どおりに動作しない

私は

particle.pos[0] = 100 * math.sin(188.5 * t) + screen_width/2 

を使用する場合、私はそれが期待通りに動作しますが、私は

omega = 2*math.pi*fps 
particle.pos[0] = 100 * math.sin(omega * t) + screen_width/2 

を使用する場合、矩形が描かれているが、移動しません。私は、オメガが約188.5であり、オメガと188.5の両方が浮動小数点であることを確認しました。私が考えることができるのは、math.piが何らかの原因で問題を引き起こしているということだけですが、その理由はわかりません。

編集: 全体のこと

import sys 
import math 
import pygame 
from pygame.locals import * 

pygame.init() 

BLACK = (0, 0, 0) 
WHITE = (255, 255, 255) 
RED = (255, 0, 0) 
GREEN = (0, 255, 0) 
BLUE = (0, 0, 255) 

fps = 30 
fpsClock = pygame.time.Clock() 

screen_width, screen_height = 640, 480 
screen = pygame.display.set_mode((screen_width, screen_height)) 


class Particle: 
    """Particle""" 
    def __init__(self, size, pos, particlecolor): 
     self.size = size 
     self.pos = pos 
     self.particlecolor = particlecolor 

    def draw(self): 
     pygame.draw.rect(screen, GREEN, [self.pos, self.size]) 

particle = Particle([10, 10], [screen_width * .25, screen_height * .5], GREEN) 

t = 0 
omega = 2*math.pi*fps 

while True: 
    t += 1 
    screen.fill(BLACK) 

    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 

    particle.pos[0] = 100 * math.sin(omega * t) + screen_width/2 
    # particle.pos[0] = 100 * math.sin(188.5 * t) + screen_width/2 

    particle.draw() 

    pygame.display.flip() 
fpsClock.tick(fps) 
+1

[More code please](http://stackoverflow.com/help/mcve) – skrx

+0

@skrxがコードを追加しました – user44557

+0

't 'が0、結果が320、' t'が100で '319.9999999997962'ということを考えれば、時間。 – zondo

答えて

2

問題は、あなたの角度として2 *にMath.PIラジアンの倍数を使用することである(つまり、360°(全円)になります)ので、あなたがほとんど取得式100 * math.sin(omega * t) + screen_width/2と同じ結果になります。

print 100 * math.sin(omega * t) + screen_width/2 

出力:

319.99999999999784 
319.9999999999957 
319.99999999998784 
319.99999999999136 
319.9999999999949 
319.99999999997567 
319.99999999997925 

はいい結果を得るためにomega = 0.1ラジアンを試してみてください。

関連する問題