• お知らせ
  • コラム
  • サイトマップ
株式会社アーツテック
“難しい”を“簡単”に変える技術で、新マーケットの創造 株式会社アーツテック
開発会社として、技術の利用の仕方や可能性、
営業・設計といったそれぞれのビジネスシーンで重要なことや経験談、
これから社会に出る方々へのアドバイスなどを現場の社員がお話しします。
  
コラムの更新は随時行っていきます。
  • Home
  • Services
  • Solution
  • Company
  • Recruit
  • Contact

仕事の知識を趣味に使ってみる

仕事の知識を趣味に使ってみる

実務の経験を生かして実務では使用したことが無いFlashを使ってプログラミングをしてみます。プログラム言語は違っても、考え方は変わらない?

プログラミング言語は世に数多く存在しています。
それぞれ固有の言語仕様というものが存在し、それに対応するプログラミングツールも多種多様です。

そんな中運が良いのか悪いか、仕事に合わせて毎回別のプログラミング言語で書くという、まさに自分が言語を選ぶのではなく、仕事が言語を選ぶ状態になっていました。そんな生活をしていると、別の言語に変わることにすっかり慣れてしまいました。
そして思ったことがあります。
使用する言語が変わってもやれることは同じであると。

つまり、プログラミング言語はそれぞれ多かれ少なかれクセはあるものの、論理的に同じ考えの下でプログラムを組んでいけば結果同じものが作れると思いました。
という訳で今回は、実務の経験を生かして実務では使用したことが無いFlashを使ってプログラミングをしてみます。

ムービークリップがステージ上を移動するFlashムービーを作成する

作成するワークスペースは以下の画像になります。

1)1フレーム目のみを使用します
2)”background”のタイムラインに、黄緑色でステージを描いて奥行きを持たすため台形にします
3)ステージのタイプをボタンにします
4)”human”タイムラインに、humanムービークリップを作成しステージの上に配置します
5)”script”タイムラインに、ActionScriptの「stop();」を記述しておきます

ステージがクリックされた時の動作を設定する

ステージがクリックされたら、クリックされたマウスの位置を引数にhumanオブジェクトの関数を呼び出します。
更に、humanオブジェクトが歩く動作を設定します。

on(release) {
   _root.human.moveHuman(_root._xmouse, _root._ymouse);
   _root.human.human.setAnimation("walk");
}

 

配置したhumanオブジェクトに移動するActionScriptを追加する

ムービークリップの移動はx軸とy軸の増減で移動しているように見せます。
その為には、x軸とy軸に分けて個々に状態を変化させていかなければなりません。

onClipEvent (load) {
  _x_flg = 0;
}

onClipEvent(enterFrame) {

 function setMoveHuman() {
  xPos = _root._xmouse; // クリックしたx軸の値を保持する
  yPos = _root._ymouse; // クリックしたy軸の値を保持する
  _x_end_flg = 0;    // x軸の移動距離がy軸より長い場合のフラグ
  _y_end_flg = 0;    // y軸の移動距離がx軸より長い場合のフラグ
  xZouka = 2;      // x軸方向の移動増加値
  yZouka = 1;      // y軸方向の移動増加値

  // humanの位置とクリックした位置の距離の関係を定義し、x軸に関してはhumanの向きを変える
  if (xPos >= this._x) {
   if (_x_flg == 0) {
    this.human.flipVertical();
   }
   _x_flg = 1;
  }
  if (xPos < this._x) {
   if (_x_flg == 1) {
    this.human.flipVertical();
   }
   _x_flg = 0;
  }
  if (yPos >= this._y) {
   _y_flg = 1;
  }
  if (yPos < this._y) {
   _y_flg = 0;
  }

  // 斜めに移動するためにxとyの増加の割合を計算する
  _x_abs = Math.abs(xPos - this._x);
  _y_abs = Math.abs(yPos - this._y);
  if (_x_abs > _y_abs) {
   yZouka = _y_abs / (_x_abs / xZouka);
  } else {
   xZouka = _x_abs / (_y_abs / yZouka);
  }
 } // moveHuman関数終了 --

 // 移動処理(x,y軸両方の移動が終了するまで続ける)
 if ((_x_end_flg != 1) and (_y_end_flg != 1)) {
  if (_x_end_flg == 0) {
   if (_x_flg == 1) {
    if ((xPos - 3) > this._x) {
     this._x += xZouka;
    } else {
     _x_end_flg = 1;
    }
   } else {
    if (_x_flg == 0) {
     if ((xPos + 3) < this._x) {
      this._x -= xZouka;
     } else {
      _x_end_flg = 1;
     }
    }
   }
  }
  if (_y_end_flg == 0) {
   if (_y_flg == 1) {
    if ((yPos - 2) > this._y) {
     this._y += yZouka;
    } else {
     _y_end_flg = 1;
    }
   } else {
    if (_y_flg == 0) {
     if ((yPos + 2) < this._y) {
      this._y -= yZouka;
     } else {
      _y_end_flg = 1;
     }
    }
   }
  }
  _wait_flg = 1;
 } else {
  // x,y軸の移動が終了したらhumanの移動を停止する
  if (_wait_flg == 1) {
   this.human.setAnimation("wait");
   _wait_flg = 0;
  }
 }
}

ここでのポイントはこれだけの処理を”if文”でしか使用していない点です。
そもそもActionScriptには難しい処理が出来ないので使えるものを工夫して使用するしかありません。
そしてもう一つ、”while”や”for”などの記述がありませんが実は”ループ処理”が入っています。

onClipEvent(enterFrame)

”enterFrame”とあるように、このフレームにきたら処理を行うという指示です。
これは冒頭で設定した「stop()を記述する」がポイントになっていて、常に同じフレームにいるので何度も処理を行おうとします。
ここにループ処理が潜んでいました。
この様に、ツールによっては同じ処理方法でも実現する方法が違ってきます。

動作確認

以上の設定を行うと、ステージを動き回るムービークリップが作成されます。

 

終わりに

同じ事を実現する時、言語の特性やそのツールの得意分野などを考慮して選択できるようになれれば、幅広く早く対応できるようになると思います。
機会があったら嫌がらず色々な言語に挑戦してみてはいかがでしょうか。

開発部:5年目
事業内容
システム開発
カードビジネス事業
品質管理
iPhoneアプリケーション開発
アーツテックについて
会社概要
会社沿革
アクセス
アーツテックはこんな会社です
新卒採用
中途採用
ページの先頭へ戻る
  • ホーム
  • このサイトについて
  • プライバシーポリシー
  • お問い合わせ

  株式会社アーツテック 〒141-0021 東京都品川区上大崎1-1-17 LSビル8階 TEL:03-5449-7511
Copyright(C) 2010 Artstech Inc. All Rights Reserved.