忍者ブログ
研究室生活のメモ・・・だった過去の遺産。移転先→http://negimochix2.blogspot.com/
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

完成しそうですよ.
何がって?
なんとか,今月中にうpできそうなので,
それはそのときに.

ニコ動へのうpも考えてます.
つーか,デスクトップのキャプチャってフリーソフトとかあるのかな?
そういえば,エンコの知識とか全くねぇ・・・
調べてみようか.

PR
あまりにも意味がわからなかったので,
そのままタイトルにしてしまったw

Papervision3D 2.0で追加されたBasicViewクラスはカメラやViewPortといった,描画でかならず必要となるクラスをまとめて宣言してくれるすぐれもの.
Spriteクラス→AbstractViewクラス→BasicViewクラス
という継承なのでSpriteとしても使えるところが便利.

で,BasicViewクラスでカメラを"CAMERA3D"で宣言して自由にカメラを動かそうと思ったときに気づいたことなんだけど・・・.
カメラを設定するために以下のようなコードを書いた.
basicView = new BasicView(container.stage.stageWidth, 
                          container.stage.stageHeight,
                          true,
                          true,
                          "CAMERA3D");
// カメラの位置
basicView.camera.x = 0;
basicView.camera.y = 0;
basicView.camera.z = -1800;
// カメラの視点
basicView.camera.target.x = 100;
basicView.camera.target.y = 0;
basicView.camera.target.z = 0;
(本来はBasicViewをextendした方がスマートかもね)
上のコードを実行すると,
(;・∀・)あれ?
targetが未定義だと怒られた.
CAMERA3Dを指定したんだし,targetはCamera3Dクラスでpublicなんだから,当然Camera3Dクラスのプロパティは使えるはずだよね?

で,ソースを読んでみた.
どうやらスーパクラスのAbstractViewクラスでカメラのプロパティ_cameraを宣言して,getterを使ってcameraでプロパティアクセスができるようになっていたのだけど・・・
protected var _camera:CameraObject3D;

public function get camera():CameraObject3D
{
    return _camera;
}
(;・∀・)ハッ?
_cameraプロパティがCameraObject3Dクラス!?
カメラにはCamera3Dクラス,FreeCamera3Dクラス,FrustumCamera3Dクラスの3つあって,CameraObject3Dを継承している.
で,BasicViewクラスではそれらをnewして_cameraに代入しているのだけれど・・・_cameraプロパティがCameraObject3Dクラスだったら,継承したプロパティ(target)なんかあるはずねぇよw

まだまともにPapervision3D始めて1日も経ってないのに,いきなりバグ発見?
ヾ(・∀・;)オイオイいくらベータとはいえこんな初歩っぽいところで間違っててこれでいーのか.

まあ,でもまだバグって決まった訳じゃないし・・・.
AbstractViewクラスの_cameraプロパティがCameraObject3Dクラスである理由が分かる方がいたら是非教えて頂けるとありがたいです.

とりあえず,対策としてAbstractViewクラスを次のように編集してどうにかしてみた.
protected var _camera;

public function get camera()
{
    return _camera;
}



追記:
自己解決.
よく見たら,BasicViewクラスにこんな記述が.
public function get cameraAsCamera3D():Camera3D
{
    return _camera as Camera3D;
}
コレ使ってアクセスしろというわけですか.
つまり,
basicView.cameraAsCamera3D.target.x = 100;
basicView.cameraAsCamera3D.target.y = 0;
basicView.cameraAsCamera3D.target.z = 0;
とすればよかったのね.
でも,そうすると_cameraのsetterが全く持って意味がないよね.
そういうところってちゃんと整理しておかないとダメだと思うんだけどなぁ.
Action Script 3.0でサウンドの一時停止,自動ループ再生ができた.
サウンドでは主に,
mp3の実体を扱うSoundクラス,
Soundクラスで再生を開始した音楽を制御するSoundChannelクラス

の2つが必要.
また,音量の調整,左右のスピーカーに流す割合を設定するには,SoundTransformクラスが必要.
SoundTransformクラスはSoundクラス専用というわけではなく,
Flash全体のサウンド(flvファイルのサウンドとかも)の設定にも使われるクラス.

最初は,↑の各クラスの役割をはっきり認識していなかったので,
一時停止をやっても2重再生とかのバグが起こって困った.

ソースはこんな感じ.
var sound:Sound = new Sound();
var soundCh:SoundChannel;

// サウンドの再生位置
var _currentPos:Number;
// 通常時のサウンドボリューム
var _soundVol:Number = 1.0;

var url:URLRequest = new URLRequest(mp3ファイル名);
// ロード開始
sound.load(url);
// サウンドのロード完了のイベントリスナー登録
sound.removeEventListener(Event.COMPLETE,
                          SoundCompleteHandler);

// サウンドのロード完了
function SoundCompleteHandler(event:Event) {
  // 位置0から再生開始
  soundCh = sound.play(0, 1);
		
  // 音量設定
  changeSoundVolume(_soundVol);

  // mp3の読み込み完了メソッド解除
  sound.removeEventListener(Event.COMPLETE,
                            SoundCompleteHandler);

  // 再生終了のイベントリスナー登録
  soundCh.addEventListener(Event.SOUND_COMPLETE,
                           SoundChannelCompleteHandler);
}

// サウンドの一時停止
function pauseMusic():void {
  // 再生位置を保存
  _currentPos = soundCh.position;
  // ストップ
  soundCh.stop();
  // SoundChannelの開放
  soundCh.removeEventListener(Event.SOUND_COMPLETE,
                              SoundChannelCompleteHandler);
  soundCh = null;
}

// サウンドの再生
function restartMusic():void {
  // 保存した再生位置から再生
  soundCh = sound.play(_currentPos, 1);
  soundCh.addEventListener(Event.SOUND_COMPLETE,
                           SoundChannelCompleteHandler);
  // 音量設定
  changeSoundVolume(_soundVol);
}

// 音量調整
function changeSoundVolume(setVol:Number):void {
  // 音量の制御用クラス
  var soundTrans:SoundTransform;

  soundTrans = soundCh.soundTransform;
  soundTrans.volume = setVol;
  soundCh.soundTransform = soundTrans;
}

// サウンド再生の終了イベント(ループ再生用)
function SoundChannelCompleteHandler(evt:Event):void {
  // 安全のため開放
  soundCh.removeEventListener(Event.SOUND_COMPLETE, 
                              SoundChannelCompleteHandler);
  soundCh = null;
	
  // 最初から再生
  soundCh = sound.play(0, 1);
  soundCh.addEventListener(Event.SOUND_COMPLETE, 
                           SoundChannelCompleteHandler);

  // 音量設定
   changeSoundVolume(_soundVol);
}

Soundクラスのstartメソッドの返り値がSoundChannelクラス.
以後,得られたSoundChannelを使ってサウンドを制御する.

サウンドの一時停止は,flvの場合と違ってpauseメソッドがない.
なので,再生位置を予め保存しておいて,SoundChannelクラスを破棄する.
ここで,SoundChannelクラスがちゃんと破棄されていないと後で再生をしたときに2重再生の原因となるので注意.
再生時は,保存しておいた再生位置をstartメソッドの第1引数に指定でおk.

ループ再生自体は,Soundクラスのstartメソッドの第2引数でリピート回数を指定すればいいんだけど,これじゃリピートが有限になっていつかは止まってしまう.
なので,常に自動的にループさせるには,1回の再生にしておいて,再生終了後のイベントが起きたときに,再び最初から再生させればいい.

上のソースをクラスとして作っておいて, さらに再生位置の移動,ボリューム設定を追加した結果,こんな感じのFlashができました.
test_sound


ちなみに,今回使用させていただいた音楽はこちら.

今日,授業で自己組織化マップ(SOM)の発表会ですた.
内容は,「自分の手を入力として,それに格子状のニューロンが収束する様を見て楽しみましょう」というもの.

見て楽しむということで当然GUIですよ.
でも,JavaでSwingとか,VCでMFCとか正直やってらんないよね.
なので,AIRで作っちゃいました!

ダウンロードは↓
SOM Sample ver.2.0
※このプログラムはAIRアプリケーションです.実行にはAdobe AIRが必要です.

SOM Sample ver.2.0

くさもちは,GUIに困ると(AIRで)ついやっちゃうんだ!

まあ,AIR使ってるのはローカルから画像ファイルを読み込めるところだけど.
なので,そのうちFlash版も作っておこうかと思う.

使い方
とりあえず,Drawing Spaceにマウスでお絵かきするか,「Open」ボタンで画像を読み込む.
画像の場合,基本は2値画像または2値画像の白の部分を透過にしたもの.
普通の画像でもできなくはないけどね.
黒以外のピクセルがニューロンへの入力となります.
ニューロン数,学習率,繰り返し回数の上限を設定後に「Set」ボタンでセット.「Start」ボタンで実行します.
実行中,「Skep」の値を上げるとその値だけ描画を省いて表示するので,更新の速度が早くなります.
近年,従来のWeb環境を改善するアプリケーションとして,Rich Internet Application(RIA)が注目されている.
RIAは,JavaScript,XML,Flashなどを用いることで,Webブラウザ上でユーザにとって自由度の高いユーザーインターフェースの提供を可能とする( ´_ゝ`)フーン.
このような背景のもと,アドビシステムズはRIAをデスクトップアプリケーションとして開発,実行するためのランタイムライブラリとしてAdobe Integrated Runtime(AIR)をリリースした(2008年2月ヽ(゚Д゚)ノ新しい!!).
AIRを用いることで,自由度の高いユーザーインターフェースを持ったデスクトップアプリケーションの作成が可能となるΣ( ゚Д゚) スッ、スゲー!!.
本発表では,AIRの概要とFlash開発側の視点からAIRアプリケーションの構築について簡単に説明する.
さらに,実際にAIRが用いられた例をいくつか紹介する.


・・・という内容で自主ゼミしてきました.
ゼミ用にサンプルプログラムを3つほど作ってみました.
今回は,その中のひとつのアプリをうpしますた.

MyTurn.air


なお,これはAIRアプリなので,Adobe AIRがインスコされてないと動きません.
Adobe AIRがインスコされていると,
ファイルを実行すると,インストーラが立ち上がります.
てきとーなところインスコすればおk.
なお,アンインスコは各自OSの機能からやってください.



・・・

これはひどいwww
なんとか生き延びたくさもちです.
前の虫のプログラムですが,いまさらながら1.0にバージョンアップしますた.
実際,発表したときはこんな感じでした.

bugs.ver.1.0

Bugs ver.1.0仕様
・「表示スピード」の追加
・「ステップ数」の表示を追加
・フィールドの四隅の壁をなくし,トーラス状態に仕様変更.
・最初Setしたときは,0.1の確率でバクテリアが配置されるように固定.
・各パラメータの初期値を微妙に調整.


表示スピードは,単純にフレーム単位の表示を飛ばして表示するだけなので,
飛び飛びに見えてしまいます.
PCによるかもしれないけど,最高でも5ぐらいが限界なので注意.

トーラス状態とは,すなわち上下と左右が繋がってるってこと.
前回のバージョンでは四隅を壁としていた.
だから,端っこでロックがかかってしまう虫がいたため変更した.

やってみるとわかるけど,最初はぐるぐる自分の周りをテキトーに動くのに,
すぐに斜め移動に変化していく.
これは,斜め移動はトーラス状態の場合,一番効率的な餌の取り方だと考えられる.
Infomation
くさもち 【中の人】
・くさもち
・ボカロ廃大学院生
・βからのニコ厨
・もちろん非リア充
・ミクZ4 第二期個人スポンサー

【メール】
・negimochi.tabetai(゚Д゚)gmail.com
(゚Д゚)→@

【その他やってるもの】
Twitter

・これは痛いピアプロ
・過去の遺産smart.fm

【作ったもの】
・製作に参加したDTX GDPメインサイト
で,実際に作ったIRページ
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Heartsnative
『Heartsnative/MOSAIC.WAV×鶴田加茂 feat.初音ミク』応援中!
VOCALOID Ranking Watcher
新曲は常にチェックすべし。
真・フルみっくすプレイヤー
おすすめ記事
jubeat ripples
今更やってみる