macOS CatalinaでProcessing 3.5.4をPythonモードに設定してコードを書いています。Pythonのバージョンは3.8.3です。
https://cocopon.me/zero-pde/image/ の冒頭の画像のリンク先にあるサンプルコード
https://github.com/cocopon/zero-pde/blob/master/10-image/advanced/shear/shear.pde
を参考にして、Javaで記されているのをわからないなりになんなく書き換えて、pythonモードで動作するようにすることが出来はしました。
しかし一箇所だけ、エラーがなぜ起きるのかを理解できていません。どうしてこのようになるのかを知りたいです。コードは以下の通りです。
Python
1def setup() : 2 global CELL_SIZE,Y_OFFSET,x,y,img 3 CELL_SIZE = 30 4 Y_OFFSET = 0 5 x = 0 6 y = 0 7 background(0, 0, 0) 8 img = loadImage("test.png") 9 size(1000,1000) 10 image(img,0, 0) 11 12 13 14def draw() : 15 global x,y#←これがないと動かないがなぜそうなるのかは理解していない 16 #画像を描く先のXY座標 17 dstx = x 18 dsty = y 19 20 #描く画像のXY座標 21 srcx = int(x) + int(random(-CELL_SIZE, CELL_SIZE) ) 22 srcy = int(y) + int(random(-CELL_SIZE, CELL_SIZE) ) 23 24 copy( img,srcx, srcy + Y_OFFSET, 25 int(CELL_SIZE), int(CELL_SIZE), 26 dstx , dsty , 27 int(CELL_SIZE ), int(CELL_SIZE ) ) 28 29 x = x + CELL_SIZE 30 31 if (x >= width) : 32 x = 0; 33 y = y + CELL_SIZE;
def draw()〜の次の行にある、global x,yのコードを消して実行すると、以下のようなエラーが出ます。
processing.app.SketchException: UnboundLocalError: local variable 'x' referenced before assignment
at jycessing.mode.run.SketchRunner.convertPythonSketchError(Unknown Source) at jycessing.mode.run.SketchRunner.lambda$startSketch$3(Unknown Source) at java.lang.Thread.run(Thread.java:748)
変数x,yの2つだけはdraw()関数のなかでも再度globalを使用しないと、ローカル変数扱いとなってエラーが発生してしまいます。なぜこのようになるのかがわかりません。
試しに以下のコードを実行してみたときには、なんのエラーも出ずに動きました。
python
1def setup(): 2 global x,y,abc 3 x = 255 4 y = 127 5 size(600,600) 6 7def draw(): 8 d = x 9 background(d) 10 fill(y) 11 ellipse(300,300,300,300)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/19 12:31