[AS3] アクリルパネルでよくある作品をヒントにしました

2009/07/9

こんにちは。きんくまです。
こんなのを作りました。

wonderflにも投稿しました。
>>アクリルパネルでよくある作品をヒントにしました

展覧会に行ったので、それっぽくやってみようと思いました。
このソースのあとに、切り替わる際のアニメーションを付け加えたものを完成させました。
ところがこれがひどい。目がチカチカして、例のポケモンショック状態に。
見ていて段々気持ち悪くなってきてしまったので、お蔵入りしました。

以下ソースです。

/*
 * クリックするたびに模様が変わるよ
 * When mouse click, pattern will change.
 */
package
{
  import flash.display.BlendMode;
  import flash.display.Graphics;
  import flash.display.Sprite;
  import flash.display.StageScaleMode;
  import flash.events.Event;
  import flash.events.MouseEvent;

  [SWF(width="315", height="445", frameRate="30", backgroundColor="#000000")]
  public class Main extends Sprite
  {
    public var canvass:Array;
    public var numOfCanvas:int = 7;
    public var canvasContainer:Sprite;
    public var sw:Number;
    public var sh:Number;
    public var col:int;
    public var raw:int;
    public var switchSP:Sprite;
    public var startFlag:Boolean = false;

    public function Main()
    {
      sw = this.stage.stageWidth * 1.5;
      sh = this.stage.stageHeight * 1.5;
      this.stage.scaleMode = StageScaleMode.NO_SCALE;
      init();
    }

    private function init():void
    {
      var i:int;
      var sp:Sprite;


      canvass = new Array();
      canvasContainer = new Sprite();
      this.addChild(canvasContainer);
      canvasContainer.x = this.stage.stageWidth / 2;
      canvasContainer.y = this.stage.stageHeight / 2;

      for (i = 0; i < numOfCanvas; i++) {
        sp = new Sprite();
        canvass.push(sp);
        canvasContainer.addChild(sp);
        sp.x = -sw / 2;
        sp.y = -sh / 2;
        sp.z = 10 * i;
        sp.blendMode = BlendMode.SCREEN;

      }

      drawSquares();


      switchSP = new Sprite();
      this.addChild(switchSP);
      var g:Graphics = switchSP.graphics;
      g.beginFill(0, 0);
      g.drawRect(0, 0, this.stage.stageWidth, this.stage.stageHeight);
      g.endFill();
      switchSP.addEventListener(MouseEvent.CLICK, clickHD);
    }

    private function clickHD(e:MouseEvent):void
    {
      if (startFlag == false) {
        this.addEventListener(Event.ENTER_FRAME, render);
        startFlag = true;
      }
      drawSquares();
    }

    private function render(e:Event):void
    {
      var stageW:Number = this.stage.stageWidth;
      var stageH:Number = this.stage.stageHeight;
      var radX:Number = (stageW - this.stage.mouseX) / stageW * Math.PI;
      var radY:Number = (stageH - this.stage.mouseY) / stageH * Math.PI;
      canvasContainer.rotationY += (-45 * Math.cos(radX) - canvasContainer.rotationY) * 0.1;
      canvasContainer.rotationX += (30 * Math.cos(radY) - canvasContainer.rotationX) * 0.1;
    }

    private function drawSquares():void
    {
      col = 70 * Math.random();
      raw = 80 * Math.random();
      var sp:Sprite;
      var _z:int = Math.random() * 100;
      for (var i:int = 0; i < numOfCanvas; i++) {
        sp = canvass[i];
        sp.z = _z * i;
        drawSquare(sp);
      }
    }

    private function drawSquare(sp:Sprite):void
    {
      var i:int, j:int;
      var dw:Number = sw / col;
      var dh:Number = sh / raw;
      var g:Graphics = sp.graphics;
      var drawFlag:Boolean = false;
      var color:int = 0xffffff * Math.random();
      g.clear();
      g.beginFill(color, Math.random());
      for (i = 0; i < raw; i++) {
        for (j = 0; j < col; j++) {
          if (drawFlag) {
            g.drawRect(dw * j, dh * i, dw, dh);
          }
          drawFlag = !drawFlag;
        }
      }
      g.endFill();
    }
  }

}
LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

ページトップへ戻る