トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     ループ処理で配列に入れたMCのアルファを上手に増やせない
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
wingard
Åê¹ÆNo.27410
投稿日時: 2006-7-28 11:13
新米
居住地: 大阪
投稿: 21
使用環境:
WindowsXP.Pro
Flash8.Pro
Flashサイト初製作中。
現在自社HP製作中です。
ループ処理で配列に入れたMCのアルファを上手に増やせない
お世話になっております。
もっと端的に説明できればよかったのですが、
スキルが足りずに上手くできなさそうでしたので、
コードを全部掲載させていただきます……orz

メニューに使うムービークリップの名前を配列に入れて、
その配列の順番にアルファを時間差で少しずつ増やしていこうと思いました。
(メニューに使うので、後から数が増えても大丈夫なようにしたいので)
そこで、次のようなスクリプトを書きましたが、
MCが全く反応しません。

期待としてはj+kの値が0?6のときだけ、
menuArrowArrayの0?6のMCだけアルファが10ずつ増えていって、
最後のMCが100になった時点でループが終わるはずだったのですが、
trace結果を見てみると、なぜか値が全て加算されていっています。
あまりの意味のわからなさに、パニック寸前です。
どうか、ご助言よろしくお願いいたします。

script

stop();

onEnterFrame = topArrowMove;

function topArrowMove():Void
{
	var menuArrowArray:Array = new Array();
	var menuNumber:Number = 7;
	var i:Number;
	var j:Number = menuNumber - (menuNumber * 2) + 1;
	var k:Number;

	for(i=0;i<menuNumber;i++)
	{
		menuArrowArray[i] = _root["menuArrow" + i];
		_root[menuArrowArray[i]]._alpha = -100;
	}

	for(j;j<menuNumber;j++)
	{
		for(k=0;k<menuNumber;k++)
		{
			_root[menuArrowArray[j+k]]._alpha += 10;
			trace("alpha " + (j+k) + (" = ") + _root[menuArrowArray[j+k]]._alpha);
		}
	}
	_root.gotoAndStop(20);
}


trace結果はこんな感じです。

alpha 0 = -89.84375
・
・
alpha 0 = -79.6875
alpha 1 = -69.53125
・
・
alpha 0 = -59.375
alpha 1 = -49.21875
alpha 2 = -39.0625
・
・


----------------
WindowsXP.Pro  Flash8.Pro

ひろゆき
Åê¹ÆNo.27414
投稿日時: 2006-7-28 11:58
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: ループ処理で配列に入れたMCのアルファを上手に増やせない
何をなさろうとしているのか、いまひとつ分からないのですが。

サンプル

stop();

var menuArrowArray:Array = new Array();
var menuNumber:Number = 7;

function init():Void {
	for (var n:Number = 0; n < menuNumber; n++) {
		var _mc:MovieClip = this["menuArrow"+n];
		_mc._alpha = 0;
		menuArrowArray[n] = _mc;
	}
}
init();

onEnterFrame = topArrowMove;

var j:Number = menuNumber - (menuNumber * 2) + 1;

function topArrowMove():Void {
	for(var n:Number = 0; n < menuNumber; n++) {
		menuArrowArray[n+j]._alpha += 10;
	}
	if (j < 0) {
		j++;
	}
	//_root.gotoAndStop(20);
}


----------------
質問する際は、回答者に具体的な情報を与えてください。

wingard
Åê¹ÆNo.27419
投稿日時: 2006-7-28 13:31
新米
居住地: 大阪
投稿: 21
使用環境:
WindowsXP.Pro
Flash8.Pro
Flashサイト初製作中。
現在自社HP製作中です。
Re: ループ処理で配列に入れたMCのアルファを上手に増やせない
ご回答ありがとうございます。
わかりにくくて申し訳ありません。

menuArrowArray[n+j]._alpha += 10;


ここの箇所だと思うのですが、
このように配列に入れたMCの、アルファを10ずつ上げていく、
ということがやはりできません。
何か良い対策はありませんでしょうか?


----------------
WindowsXP.Pro  Flash8.Pro

wingard
Åê¹ÆNo.27427
投稿日時: 2006-7-28 14:02
新米
居住地: 大阪
投稿: 21
使用環境:
WindowsXP.Pro
Flash8.Pro
Flashサイト初製作中。
現在自社HP製作中です。
Re: ループ処理で配列に入れたMCのアルファを上手に増やせない
すみません、うまくいかない原因がわかったかもしれません。
for文で繰り返していると、最初のループだけで
MCのアルファが全部100にまで達していたせいで、
徐々に表示することができなかったんだと思います。

ひろゆきさんのコードをもっとよく見て、
それでもわからなければ再度質問させていただきます。


----------------
WindowsXP.Pro  Flash8.Pro

wingard
Åê¹ÆNo.27430
投稿日時: 2006-7-28 14:29
新米
居住地: 大阪
投稿: 21
使用環境:
WindowsXP.Pro
Flash8.Pro
Flashサイト初製作中。
現在自社HP製作中です。
Re: ループ処理で配列に入れたMCのアルファを上手に増やせない
思っているようにできましたー('▽')

やりたかったのは、こういうものでした。
http://wingard.upper.jp/test3/test.swf


stop();

var menuArrowArray:Array = new Array();
var menuRoopArray:Array = new Array();
var menuMove:Array = new Array();
var menuMoveNum:Number = 10;	//移動距離
var menuNumber:Number = 7;		//メニュー項目数

function init():Void
{
	for(var i:Number=0;i<menuNumber;i++)
	{
		var _menuMC:MovieClip = this["menuArrow" + i];
		menuArrowArray[i] = _menuMC;
		menuRoopArray[i] = i;
		menuMove[i] = menuMoveNum;
	}
}
init();

onEnterFrame = topArrowMove;

function topArrowMove():Void
{
	for(var k:Number=0;k<menuNumber;k++)
	{
		if(menuRoopArray[k] == 0)
		{
			menuArrowArray[k]._alpha += 10;
			if(menuMove[k] > 0)
			{
				menuArrowArray[k]._x += 1;
				menuArrowArray[k]._y += 1;
				menuMove[k]--;
			}
		}
		else
		{
			menuRoopArray[k] -= 1;
		}
	}
}


また意味不明なことを質問するかもしれませんが、
なにとぞよろしくお願いします。


----------------
WindowsXP.Pro  Flash8.Pro

ひろゆき
Åê¹ÆNo.27432
投稿日時: 2006-7-28 14:39
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: ループ処理で配列に入れたMCのアルファを上手に増やせない
一気にスクリプトを組み立てるのではなく、
少しずつ trace するなりして、
確認しながらスクリプトをお書きになった方が良いでしょう。

stop();

onEnterFrame = topArrowMove;

function topArrowMove():Void {
	var menuArrowArray:Array = new Array();
	var menuNumber:Number = 7;
	var i:Number;
	var p:Number = menuNumber - (menuNumber * 2) + 1;
	var k:Number;

	for(var i:Number = 0; i < menuNumber; i++) {
		menuArrowArray[i] = _root["menuArrow" + i];
		_root[menuArrowArray[i]]._alpha = -100;
		trace(_root[menuArrowArray[i]]);
		trace(_root[menuArrowArray[i]]._alpha);
	}
}
だと、
_level0
-100
_level0
-100
_level0
-100
	(以下略)
と出力されますから、
引用:
メニューに使うムービークリップの名前を配列に入れ
られてはいません。

するのであれば、
	for(var i:Number = 0; i < menuNumber; i++) {
		menuArrowArray[i] = "menuArrow" + i;
		_root[menuArrowArray[i]]._alpha = -100;
でしょう。

それでも、_alpha = -100 に「もどし」続けることになるので、
結果的に、-100 から増えませんけど。

複雑なことをする前に、
onEnterFrame や for文の使い方を学習された方が良いように思います。
あと、変数の扱い方が分かっていないのであれば、
やたらと、var 宣言するのは、避けた方が良いように思います。


引用:
また意味不明なことを質問するかもしれませんが、
なにとぞよろしくお願いします。

レスがつきにくくなるだけなので、意味が分かるように説明してください。


----------------
質問する際は、回答者に具体的な情報を与えてください。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops