日経ソフトウエアのムックにProcessingの解説があり、自由落下や弾性衝突をシミュレートできるのは面白そうと思い取り掛かった。跳ね返り係数や摩擦を動的に変えられてらいいなと思って、フォームの値を参照できるようにするのに時間がかかり(jQueryでフォームの値を参照しようとしたができなかった)、結局シミュレーションはできず終い。また次回。
確認コード:changecirclesize.html
メモ
- setupは1回だけ実行される。drawは繰り返し実行される。
- draw内で独自関数のgetSizeをコールしている。getSizeでフォームの値を取得している。
- javascriptには列挙型がない。オブジェクトを定義してswitch文で書いてみたがこういうふうに書くものなのか?
<canvas id="mycanvas"></canvas><br /> Circle Size: <input type="number" name="num" id="num" value="10" min="10" max="100" step="1" /><br /> <button onclick="startSketch();">Start</button> <button onclick="stopSketch();">Stop</button> <button onclick="clearSketch();">Clear</button> <script src="processing-1.4.1.min.js" type="text/javascript"></script> <script type="application/processing" data-processing-target="mycanvas"> void setup() { size(300, 300); } void draw() { int x = random(0, 300); int y = random(0, 300); int r = getSize(); ellipse(x, y, r, r); } </script> <script type="text/javascript"> var processingInstance; SketchState = { START: 0, STOP: 1, CLEAR: 2, }; function startSketch() { switchSketchState(SketchState.START); } function stopSketch() { switchSketchState(SketchState.STOP); } function clearSketch() { switchSketchState(SketchState.CLEAR); } function switchSketchState(on) { if (!processingInstance) { processingInstance = Processing.getInstanceById('mycanvas'); } switch(on) { case SketchState.START: processingInstance.loop(); // call Processing loop() function break; case SketchState.STOP: processingInstance.noLoop(); // stop animation, call noLoop() break; case SketchState.CLEAR: processingInstance.background(); // gray break; default: break; } } function getSize() { var size = document.getElementById('num').value; return Number(size); } </script>
参考サイト
- Processingの基礎 (全16回) – ドットインストール
- Processing.js基礎最速入門 – catch.jp
- ブラウザでお絵描きプログラミング! Processing.js 登場! – IT戦記
- Processing.js
- 日経ソフトウエア 別冊 – ゲームプログラミング入門:ITpro
訂正・補足、サンプルコードのダウンロード
ゲームプログラミング入門 (日経BPパソコンベストムック)
posted with amazlet at 12.11.08
日経BP社 (2012-10-22)
売り上げランキング: 23469
売り上げランキング: 23469
関連エントリー