
フォトビューア作成で困っています。
http://hfm-kenchan.com/Lesson/sample/daniwell_3d …
これがサンプルのフラッシュです。
各BOXごとにムービクリップローダーで外部からイメージ写真を読み込ませるところまでできたのですが
画面の中央に来た写真をクリックすると拡大表示されて、マウスが写真上からなくなると元に戻るようにしたいのですどうしてもできません。
これが、そのスクリプトです。
Stage.scaleMode = "exactFit";
var yoko :Number = 4;
var oku :Number = 4;
var edge :Number = 5;
var cx :Number = 320;
var cy :Number = 0;
var vp :Number = 200;
var sx :Number = 400;
var sy :Number = 240;
var sz :Number = 100;
var nx :Number = 0;
var nz :Array = new Array();
var ax :Array = new Array();
var az :Array = new Array();
function func_projection ( px :Number, py :Number, pz :Number, cx :Number, cy :Number, f :Number ) :Object {
var s :Number = f /( f - pz );
var obj :Object = new Object();
obj.x = cx + s * px;
obj.y = cy + s * py;
obj.s = s * 100;
return( obj );
}
var mcl :MovieClipLoader = new MovieClipLoader();
var listener :Object = new Object();
listener.onLoadInit = function ( mc :MovieClip ) {
mc._x = -mc._width/2;
mc._y = -mc._height/2;
with ( mc._parent.back ) {
_width = mc._width + edge*2;
_height = mc._height + edge*2;
_x = mc._x - edge;
_y = mc._y - edge;
}
}
mcl.addListener( listener );
for ( var i = 0; i < yoko; i ++ ) {
az[ i ] = new Array();
for ( var k = 0; k < oku; k ++ ) {
var mc :MovieClip = _root.attachMovie( "box", "box"+ i +"_"+ k, (yoko-k) * yoko + i );
mc.createEmptyMovieClip( "image_load", 0 );
mcl.loadClip( "image"+ i +"/image"+k+".jpg", mc.image_load );
var obj :Object = func_projection( i * sx, sy, - k * sz, cx, cy, vp );
mc._x = obj.x;
mc._y = obj.y;
mc._xscale = mc._yscale = obj.s;
mc.i = i;
mc.k = k;
mc.onPress = function ( ) {
nx = this.i;
for ( var i = 0; i < yoko; i ++ )
nz[ i ] = 0;
nz[ this.i ] = this.k;
}
az[ i ][ k ] = - k * sz;
}
ax[ i ] = i * sx;
nz[ i ] = 0;
}
_root.onEnterFrame = function ( ) {
for ( var i = 0; i < yoko; i ++ ) {
ax[ i ] += ( (i-nx) * sx - ax[ i ] ) / 5;
for ( var k = 0; k < oku; k ++ ) {
var mc :MovieClip = _root[ "box"+ i +"_"+ k ];
mc.swapDepths( (yoko-k+nz[i]) * yoko + i );
az[ i ][ k ] += ( (-k+nz[ i ]) * sz - az[ i ][ k ] ) / 5;
if ( az[ i ][ k ] <= 0 )mc._alpha = 100;
else mc._alpha = (sz-az[ i ][ k ])/sz * 100;
if ( 1 < mc._alpha ) mc._visible = true;
elsemc._visible = false;
var obj :Object = func_projection( ax[ i ], 240, az[ i ][ k ], cx, cy, vp );
mc._x = obj.x;
mc._y = obj.y;
mc._xscale = mc._yscale = obj.s;
}
}
}
http://hfm-kenchan.com/Lesson/contents/index.htm
このサイトを参考にしています。
アクションスクリプトに詳しい方
よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
書かれていらっしゃるサンプルとやらはここからDLできる分ですね↓。
http://hfm-kenchan.com/Lesson/contents/s868.htm
> アクションスクリプトに詳しい方
> よろしくお願いします。
と言いますか,スクリプトに詳しい詳しくないではなくて,
3D座標系をどうするかを 「考えるアイデア」 の問題だと思います。
アイデア に沿って コーディング するわけですから
アイデア=方針 によって変わると思います。
上記URLからDLできるサンプルでは,
決まった座標系(透視変換の座標系)があるのです。
> 画面の中央に来た写真をクリックすると拡大表示されて、
> マウスが写真上からなくなると元に戻るようにしたい
という状態は,
完璧にこの座標系(透視変換の座標系)から逸脱した(はみだした)ものだと思います。
その 座標系 からはみだすのでしたら,
いっそのこと,別のものを作り出せば簡単になると思います。
↑というのは私の勝手なアイデアですよ。
全く別の対処法もあると思います。
ASに詳しいか詳しくないかではなくて
どうするかを考える路線によってスクリプトは変わります。
上記URLからDLできるサンプルの
> var ax :Array = new Array();// x 座標計算
> var az :Array = new Array();// z 〃
>
> //----------------------------------//
>
> /* 座標(x,y,z), 中心(cx,cy), 視点(f) を与えると、
> x, y 座標とスケール s を持つオブジェクトを返す関数 */
> function func_projection ( px :Number, py :Number, pz :Number, cx :Number, cy :Number, f :Number ) :Object {
という部分に1行付け足します↓。
var ax :Array = new Array();// x 座標計算
var az :Array = new Array();// z 〃
//----------------------------------//
// ★付け加え
// 変数 select_mc に現在選択されている MC の名前を記録
var select_mc:String = "box0_0";
/* 座標(x,y,z), 中心(cx,cy), 視点(f) を与えると、
x, y 座標とスケール s を持つオブジェクトを返す関数 */
function func_projection ( px :Number, py :Number, pz :Number, cx :Number, cy :Number, f :Number ) :Object {
そして,
> mc.onPress = function ( ) {// マウスで押したとき
> nx = this.i;// 列番号
>
>nz[ this.i ] = this.k;// 奥行き番号
> }
という部分を次のようにします。
mc.onPress = function ( ) {// マウスで押したとき
nx = this.i;// 列番号
// もし 変数 select_mc にこのMCの名前が入っていれば
if(select_mc == this._name){
// このMC を「new_mc」という名で最高深度に複製
this.duplicateMovieClip("new_mc",_root.getNextHighestDepth());
// 「new_mc」に1フレーム進む時間毎に毎回実行する関数を定義
new_mc.onEnterFrame = function(){
// サイズを 200% に近付ける
this._xscale += (200-this._xscale)/5;
this._yscale += (200-this._yscale)/5;
}
// 「new_mc」からロールアウトしたときに実行する関数を定義
new_mc.onRollOut = new_mc.onDragOut = function(){
// このMCを消す
this.removeMovieClip();
}
}else{
select_mc = this._name;
}
for ( var i = 0; i < yoko; i ++ )
nz[ i ] = 0;// 全列の奥行き初期化(列が変わっても戻さない場合は、このループをコメントアウトする)
nz[ this.i ] = this.k;// 奥行き番号
}
3D座標系からはみだすのですから,
独自のMC(ムービークリップ)「new_mc」をコピーで作ってしまって,
全く別の動作をさせるという内容です。
※あくまでも DL できる FLA の書き換えです。
なお,duplicateMovieClip でコピーした 「new_mc」 には,
> 各BOXごとにムービクリップローダーで外部から
> イメージ写真を読み込ませるところまでできた
という写真がロードされていないと思います。
ですから,
この 「new_mc」 には再度イメージ写真をロードさせる必要があると思います。
この回答への補足
回答ありがとうございます。
遅くなって申し訳ありません。
贅沢な話ですが
「new_mc」を読み込むところまで教えていただけないでしょうか?
ご教授よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
uwscでExcelに自動記入
-
スクリップト
-
arduino プログラムについて
-
ダウンロードしたデジブックはa...
-
パソコンのリカバリーについて
-
大学からの課題をやるのに、Ado...
-
アメリカから買ったダウンロー...
-
アメブロで音声ファイルを貼る方法
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
私のコンピューター上のファイ...
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
potplayerについて質問です
-
flash (.swf) を編集したい
-
ゲオでカードを作るのは何歳か...
-
ダウンロードしたデジブックはa...
-
uwscでExcelに自動記入
-
アメブロで音声ファイルを貼る方法
-
[開発形態]UIレイアウトまでデ...
-
換気扇・経年変化
-
私のコンピューター上のファイ...
-
iframe インラインフレームにつ...
-
スマホでサイトの画像を長押し→...
-
Flash ブラウザ 段階的に排除 ...
-
ActionScript 3.0についての質...
-
アクションスクリプトを簡素化...
-
パソコンについて質問なんです...
-
Flashと普通のHTMLの表示速度に...
-
arduino プログラムについて
-
自分でチラシを作りたいです!...
-
更新されて起きた問題
-
ウディタで作ったゲームを公開...
おすすめ情報