ProcessingでPythonを使ってみる(実践編2)
前回
muromura.hatenablog.com
の続きでいろいろ試してみる
マウスとインタラクティブに
Built with Processingを参考に,マウスを押している間だけ散らばり,マウスを離すと元の位置に戻る四角形の集合体を実装しました.
import Dot #add_library('gifAnimation') def setup(): global speed, wNum, hNum, dots, gifMaker size(800, 800) wNum = 20 hNum = 20 dotSize = 10 # size of dot dotMargin = 2 # margin between each dot dotUnit = dotSize + dotMargin # the unit size of dots dots = [None for i in range(wNum * hNum)] for i in range(hNum): for j in range(wNum): dots[i * wNum + j] = Dot.Dot(dotSize, dotSize, width / 2 + dotUnit * ( i - hNum / 2), height / 2 + dotUnit * (j - wNum / 2), 50, i * wNum + j) """ gifMaker = GifMaker(this, "dots_p.gif") gifMaker.setRepeat(0) gifMaker.setDelay(10) """ def draw(): background(50) pat = mousePressed for i in range(hNum * wNum): dots[i].display() dots[i].move(0.01, pat) # need speed of dots """ gifMaker.addFrame() if (frameCount > 100): gifMaker.finish() exit() """
コメントアウトしてある部分はgif作成用です.
また,Dot classの定義は
class Dot: def __init__(self, w, h, x, y, clr, cnt): self.rectW = w self.rectH = h self.xPos = x self.yPos = y self.iniXPos = x self.iniYPos = y self.c = clr self.dotNum = cnt self.pattern = 0 self.c1 = color(255, 255, 255, 255) self.nextX = x self.nextY = y def display(self): fill(self.c1) stroke(self.c1) rectMode(CENTER) rect(self.xPos, self.yPos, self.rectW, self.rectH) def move(self, speed, pattern): self.speed = speed self.pattern = pattern if self.pattern == 0: self.speed *= 10 self.nextX = self.iniXPos self.nextY = self.iniYPos else: self.nextX += random(-width / 8, width / 8) self.nextY += random(-height / 8, height / 8) self.xDiff = (self.xPos - self.nextX) * self.speed self.yDiff = (self.yPos - self.nextY) * self.speed self.xPos -= self.xDiff self.yPos -= self.yDiff
Tips
・クラス定義などは,New Tabで新しいタブを作ってそこに書いておくとコードが見やすい
・上記のNewTabの内容は,python modeではsketchと同じディレクトリ内に.pyファイルとして保存される