mieki256's diary



2017/09/04(月) [n年前の日記]

#1 [python][pi3d] pi3dでハローワールド

せっかく Windows上でも pi3d が動くようになったので、少し使い方を調べてみたり。

球を出す。 :

_pi3dの公式ドキュメント に従って、ウインドウを生成して球を出してみたり。こんな感じに。

helloworld_ss.png

一応、ESCキーを押したら終了するようにしてある。じゃないとスクリプトを簡単に終了させられないので。

ソースは以下。

_helloworld.py
u"""
pi3d Hello World.

球を生成して描画するサンプル。
ESCキーで終了する。

Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import pi3d

# ウインドウ生成
display = pi3d.Display.create(w=640, h=480,
                              frames_per_second=60)

# 球を生成
ball = pi3d.Sphere(z=5.0)

# キーボード取得用クラスを生成
keys = pi3d.Keyboard()

# メインループ
while display.loop_running():

    # 球を描画
    ball.draw()

    if keys.read() == 27:
        # ESCキーが押されたらループを抜けて終了
        keys.close()
        display.destroy()
        break

python helloworld.py で実行できる。

Windows10 x64上だけではなく、以下の環境でも同じように表示された。
  • Ubuntu 16.04 + Python 2.7.12
  • Raspberry Pi3 + raspbian stretch + Python 2.7.13

少し解説。 :

pi3d を使うときは、import pi3d を最初のあたりに書いて、「このスクリプトはpi3dを使うよ」とPythonに教えてやる。

上記スクリプトの最初のほうに、from __future__ import なんたら、みたいな行が列挙されてるけど。これは、Python 2.7を使いつつも Python 3.x っぽく動かすための指定らしい。コレを入れとけば Python 2.7 と Python 3.x の両方で動くスクリプトが書けるのだろう。たぶん。Pythonってよく知らないから自信ないけど。

display = pi3d.Display.create(w=640, h=480, frames_per_second=60) で、ウインドウを生成。w,h が、ウインドウ横幅と縦幅の指定。frames_per_second で最大フレームレートを指定。この場合、640x480ドット、60FPSのウインドウを作れ、と指定してる。

フレームレートを指定しないと、CPUが全力でループを回す状態になって、その分、他の処理がおろそかになるのだとか。バックグラウンドで音楽を鳴らしつつ、みたいなことをしたいときはフレームレートを指定したほうがいいよ、とドキュメントには書いてあった。

ball = pi3d.Sphere(z=5.0) で、球を生成。pi3d.Sphere(x=0.0, y=0.0, z=0.0) といった感じの指定で、位置を設定できるらしい。

if keys.read() == 27: は、ESCキーが押されたかチェックしてる。…いきなり直接数値を書いて比較してるあたりがなんだか引っ掛かるなあ。

そのままいきなりスクリプトを終了させると、キー入力関係の不具合が発生する時があるらしいので、keys.close() を呼んでから終了したほうがいいかも、みたいなことが公式ドキュメントに書いてあった。pi3d_demos のサンプルスクリプト群も大体そんな感じの記述になってるっぽい。

display.destroy() でウインドウを破棄、してるのかな。たぶん。

球を動かしてみる。 :

静止画ではつまらないので、球を動かしてみたい。sinカーブで位置を変えてみる。

helloworld2_ss.gif

これも、Windows10 x64、Ubuntu 16.04、Raspberry Pi3上で同じように動いた。

ソースは以下。

_helloworld2.py
u"""
pi3d Hello World.

球を生成して描画するサンプル。位置を動かしてみる。
ESCキーで終了する。

Windows10 x64 + Python 2.7.12 32bit + pi3d 2.20
"""

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import math
import pi3d

# ウインドウ生成
display = pi3d.Display.create(w=640, h=480,
                              frames_per_second=60)

x, y, z = 0.0, 0.0, 15.0
x_ang, y_ang, z_ang = 0.0, 0.0, 0.0

# 球を生成
ball = pi3d.Sphere(x=x, y=y, z=z)

# キーボード取得用クラスを生成
keys = pi3d.Keyboard()

# メインループ
while display.loop_running():

    # sinカーブで位置を動かす
    x_ang += 3.0
    y_ang += 4.5
    z_ang += 0.8
    x = 5.0 * math.sin(math.radians(x_ang))
    y = 3.0 * math.sin(math.radians(y_ang))
    z = 7.0 * math.sin(math.radians(z_ang)) + 15.0

    # 球の位置を設定
    ball.position(x, y, z)

    # 球を描画
    ball.draw()

    if keys.read() == 27:
        # ESCキーが押されたらループを抜けて終了
        keys.close()
        display.destroy()
        break

python helloworld2.py で実行できる。

以上です。

過去ログ表示

Prev - 2017/09 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project