M5Stackでボールが永久に動くアニメーションを表示

永久……といっても、いつか動かなくなる日は来るのですが。

M5StackにM5Cloudを導入してPythonプログラミングを始めてみました
Pythonといっても、M5Cloudで使えるのは「Micropython」という、Arduinoなどの非力なマイクロコンピューターで使える簡易的なもの。これにM5Stack用のモジュールを読み込ませることで、M5Stack本体の液晶画面に図形や文字、画像などを表示できるようになっています。

今回作ったのはこんな感じのもの。

ボールが移動し、壁面で反射するのが延々と続くだけです。ええ。
かんたんなものですが、はじめてプログラムするよー、という方(自分も含め)には、ちょうどいい練習になるかもです。

左右に操作できるバーを加えればATARIのPONGっぽくなったり、四角いブロックなどを付ければ、ブロック崩しっぽくなったりと、夢が広がりまくったりしませんか?

プログラムは下記です。

from m5stack import lcd
import time
x = ox = 160
y = oy = 120
px = 1
py = 1
speed = 8

lcd.clear()
lcd.setCursor(120, 120)
lcd.setColor(lcd.RED)

def ballDraw(x,y,ox,oy):
    lcd.circle(ox, oy, 10, lcd.BLACK, lcd.BLACK)
    lcd.circle(x, y, 8, lcd.RED, lcd.WHITE)

while True:
    if x > 300 or x < 20:
        px *= -1
    if y > 220 or y < 20:
        py *= -1
    x = x + px * speed
    y = y + py * speed
    ballDraw(x, y, ox, oy)
    time.sleep(0.02)
    ox = x
    oy = y

座標を計算し、円を表示するだけではどんどん残像が残って見づらくなります。

そこで、古い円を消して、新しい円を描画するようにしています。
実際に円を描くための座標は「x」「y」とし、描画したあとで「ox」「oy」に格納しておきます。
移動後の座標(x,y)を計算し終えたら、古い座標(ox,oy)を消して、新しい座標(x,y)を描く。

こんな流れてプログラムが動いています。

以上!

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL