Pythonで球をジャンプさせる↑↑↑
I wrote: 2016/10/30
Pythonで球をジャンプさせます。もちろんPyQtを使いますよ。
球というか球に見える円をジャンプさせているですが、これを実現するために
QTimerを使用しました。Pythonにもスレッドはあるのですが、
手っ取り早くやりたかったのでこれを使いました。
ロジック的には、上方向キーを押したら、球がジャンプして、地面まで落ちたら
止まるようになっています。まあ、自由落下のアニメーションみたいなものです。
上方向キーが押されたかどうかはkeyPressEventでハンドルしています。
それとQTimerをスタートさせた後、地面に着地したら、stop()で停止させてます。
停止させないとCPU使用率がやや大きくなるので、止めるのが無難です。
以下はソース
実行されたアプリケーション(gifで貼ってます)
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で貼ってます)