Pythonで球をジャンプさせる↑↑↑

I wrote: 2016/10/30

Pythonで球をジャンプさせます。もちろんPyQtを使いますよ。

球というか球に見える円をジャンプさせているですが、これを実現するために
QTimerを使用しました。Pythonにもスレッドはあるのですが、
手っ取り早くやりたかったのでこれを使いました。

ロジック的には、上方向キーを押したら、球がジャンプして、地面まで落ちたら
止まるようになっています。まあ、自由落下のアニメーションみたいなものです。
上方向キーが押されたかどうかはkeyPressEventでハンドルしています。

それとQTimerをスタートさせた後、地面に着地したら、stop()で停止させてます。
停止させないとCPU使用率がやや大きくなるので、止めるのが無難です。

以下はソース
import sys
from PyQt4 import QtGui, QtCore, uic
from Foo import Ui_MainWindow

class Sample(QtGui.QMainWindow): 
    def __init__(self, parent = None):
        super(Sample, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.x = 175
        self.y = 175
        self.jump_power = -15
        self.velocity_y = 0
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.jumping)

    def paintEvent(self,event):
        painter = QtGui.QPainter()
        painter.begin(self)
        painter.setRenderHint(QtGui.QPainter.Antialiasing, True)
        painter.setBrush(QtCore.Qt.white)
        painter.drawRect(event.rect())

        painter.setPen(QtGui.QColor('DarkMagenta'))
        center = QtCore.QPointF(self.x, self.y)
        focusP = QtCore.QPointF(self.x-20, self.y-20)
        grad = QtGui.QRadialGradient(center,50,focusP)
        grad.setColorAt(0.0, QtCore.Qt.white)
        grad.setColorAt(1.0, QtCore.Qt.blue)
        painter.setBrush(grad)
        painter.drawEllipse(center, 50, 50)
        painter.end()

    def jumping(self): 
        self.velocity_y += 1
        self.y += self.velocity_y

        if self.y > 175:
            self.velocity_y = 0
            self.y = 175
            if self.timer.isActive() == True: self.timer.stop()

        self.update()

    def keyPressEvent(self,event):
        if event.key() == QtCore.Qt.Key_Up:
            self.velocity_y = self.jump_power
            self.jumping()
            self.timer.start(30)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    sample = Sample()
    sample.show()
    sys.exit(app.exec_())

実行されたアプリケーション(gifで貼ってます)
out