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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     パラメータの型変換
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
PENGPENG8
Åê¹ÆNo.45557
投稿日時: 2010-8-23 18:02
半人前
居住地: 愛知県
投稿: 49
使用環境:
Windows7Pro、FlashCS5Professional
パラメータの型変換
はじめまして、非常に基本的なことなのですが、いきずまっており教えていただきたくよろしくおねがいします。

BetweenAS3のイージングの種類ごとの動きをすぐに確認できるように
11種のイージングタイプを示す文字列を含むcomboBoxをおいて、
項目を選択すると該当のトゥーインを実行するようにしようとしています。
(Linear, Quad, Cubic, Quart, Quint, Sine, Expo, Circ, Back, Bounce, Elastic)
問題は以下のコードのようにイージングのタイプを示す文字列の変数を
直接BetweenAS3.tween()にいれればエラーになります。

1067: 型 String の値が、関連しない型 org.libspark.betweenas3.core.easing:IEasing に暗黙で型変換されています。

String型をこのエラー文の「IEasing」という型の変数にするのかと思い
「IEasing」型の変数を宣言だけしてみましたが不明な型ですとエラーになってしまいます。
どのように型の変換をすればいいでしょうか?
イージングの種類と処理の種類の組み合わせをswitch文にするのも現実的ではないですし・・・


private function setEasingType(e:Event):void{

	var selectSTR:String = easingType_combo.selectedItem.data.toString();
	var easingSTR:String = selectSTR + ".easeOut";
	//trace(easingSTR);
	itween = BetweenAS3.tween(myMC, {x: 500}, {x: 100}, 1, easingSTR);
	itween.play();
	
}

ひろゆき
Åê¹ÆNo.45558
投稿日時: 2010-8-23 19:40
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: パラメータの型変換
参考までに。
BetweenAS3のイージング


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

PENGPENG8
Åê¹ÆNo.45559
投稿日時: 2010-8-23 19:52
半人前
居住地: 愛知県
投稿: 49
使用環境:
Windows7Pro、FlashCS5Professional
Re: パラメータの型変換
ひろゆき様
さっそくありがとうございます。ズバリそのことで困っておりました。
各イージングクラスの.asファイルのコンストラクタをみても、どう生成していいのかわかず
この:IEasingについても、不明でしたがこのようにパラメータのオブジェクトを作るのですね。
そのてんについては構成ファイルをもっとじっくりみていきたいとおもいます。
とくにこのIEasingについて。ありがとうございました。

           ・
            easingType = Class(item.value);
           ・
           ・
            var easing:IEasing = easingType[easingMethod];
           ・
           ・
PENGPENG8
Åê¹ÆNo.45562
投稿日時: 2010-8-24 1:04
半人前
居住地: 愛知県
投稿: 49
使用環境:
Windows7Pro、FlashCS5Professional
Re: パラメータの型変換
ひろゆき様
一度は下のように、わかったつもりだったのですが詳細につめて製作していくと
不明な点が出て来てしまいまたおしえていただきたいのですが、よろしくお願いいたします。

IEasingの定義をimportした上で以下のように書き換えコンボボックスを選択すると
easingType = Class()のところでエラーメッセージ例として
「"Quad"をClass型に強制変換できない」となります。

なお、このコンボボックスはオーサリング時にステージ配置し
dataProviderも各イージング名をlabelとdataにコピペしたものです。
文字列としてはイージングもメソッドの両方、取れていることは確認しています。

参考に示していただいた「BetweenAS3のイージング」と同様と考えていたのですが、
どういったことが原因でClass型に変換できないとなるのでしょうか。
示していただいたサンプルではカスタムメニューのItemのvalueという形ですが
comboBoxのdataと違いは無いと考えていましたが・・・
comboBoxのdataは単にStringなのですがそれがマズイでしょうか?

そこで、まずは示していただいた例題でで確認しようと、
お教えいただきましたサイトのコードのままにやってみました。
ところがこちらではMain.asのリスト選択イベントハンドラの引数が
定義されていないとエラーになりどうにも先に行けませんでした。
private function select1(evt:CompoEvent):void {・・・}
もちろんCompoEvent.asも同階層においてあります。
何か根本的なところに間違いをしているのではと各クラスの定義ファイルや
そのimportなど確認したのですが問題は無いように思えました。

このサイトのサンプルの動作もまだ確認できていないのですが
質問の内容としましては、なぜeasingTypeのClass()の引数として与えた「item.value」がOKで
以下のようなコンボボックスの選択項目のdataではダメなのかという点にあります。
よろしくお願いいたします。


          (略)
import org.libspark.betweenas3.BetweenAS3;
import org.libspark.betweenas3.tweens.ITween;
import org.libspark.betweenas3.events.TweenEvent;
import org.libspark.betweenas3.core.easing.IEasing;
import org.libspark.betweenas3.easing.*;
 
public class Main extends Sprite {
private var easingType:Class = Linear;
private var easingMethod:String = "easeIn";

            (略)

private function setEasingType(e:Event):void{
	easingType = Class(easingType_combo.selectedItem.data);
	easingMethod = easingMethod_combo.selectedItem.data.toString();
	var easing:IEasing = easingType[easingMethod];
	
	var itween:ITween = BetweenAS3.tween(frog, {x: 500}, {x: 100}, 1, easing);

       itween.play();
}
ひろゆき
Åê¹ÆNo.45563
投稿日時: 2010-8-24 10:13
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: パラメータの型変換
まず、スクリプトを提示されるなら、第三者が再現できるよう、省略などしないで提示してください。
でなければ、どこに問題が潜んでいるのか、推測しなければならない場合もでてきてしまい、
回答者に余計な手間をかけさせることにもなりかねません。

次に、Class(item.value)でエラーが出ないのは、
item.valueが文字列(String)ではなく、クラス(Class)だからです。

プロパティのところにあるように
private var easingType:Class = Linear;
であって、
private var easingType:Class = "Linear";
ではありません。


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

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

Flash Professional CS4/CS6/CC

Safari 6.1
Re: パラメータの型変換
package {

	import flash.display.Sprite;
	import flash.display.Shape;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import fl.controls.ComboBox;
	import fl.data.DataProvider;
	import org.libspark.betweenas3.BetweenAS3;
	import org.libspark.betweenas3.tweens.ITween;
	import org.libspark.betweenas3.events.TweenEvent;
	import org.libspark.betweenas3.core.easing.IEasing;
	import org.libspark.betweenas3.easing.*;

	public class Main extends Sprite {
		//ステージ上にComboBoxコンポーネント(インスタンス名: combobox1, combobox2)を
		//左上に配置 (ステージサイズ: 600*400)
		private var rect:Shape;
		private var easingType:Class = Linear;
		private var easingMethod:String = "easeIn";
		private var playBtn:Sprite;

		public function Main() {
			init();
		}

		private function init():void {
			rect = new Shape();
			rect.graphics.beginFill(0xCC0000);
			rect.graphics.drawRect(-10, -10, 20, 20);
			rect.graphics.endFill();
			addChild(rect);
			rect.x = 50;
			rect.y = 200;
			var itemList1:Array = new Array();
			itemList1.push({label: "Linear", data: Linear});
			itemList1.push({label: "Quad", data: Quad});
			itemList1.push({label: "Cubic", data: Cubic});
			itemList1.push({label: "Quart", data: Quart});
			itemList1.push({label: "Quint", data: Quint});
			itemList1.push({label: "Sine", data: Sine});
			itemList1.push({label: "Expo", data: Expo});
			itemList1.push({label: "Circ", data: Circ});
			itemList1.push({label: "Back", data: Back});
			itemList1.push({label: "Bounce", data: Bounce});
			itemList1.push({label: "Elastic", data: Elastic});
			combobox1.dataProvider = new DataProvider(itemList1);
			combobox1.addEventListener(Event.CHANGE, select1, false, 0, true);
			var itemList2:Array = new Array();
			itemList2.push({label: "easeIn", data: "easeIn"});
			itemList2.push({label: "easeOut", data: "easeOut"});
			itemList2.push({label: "easeInOut", data: "easeInOut"});
			itemList2.push({label: "easeOutIn", data: "easeOutIn"});
			combobox2.dataProvider = new DataProvider(itemList2);
			combobox2.addEventListener(Event.CHANGE, select2, false, 0, true);
			playBtn = new Sprite();
			addChild(playBtn);
			playBtn.x = 300;
			playBtn.y = 380;
			playBtn.graphics.beginFill(0x000000);
			playBtn.graphics.drawRect(-30, -10, 60, 20);
			playBtn.graphics.endFill();
			playBtn.buttonMode = true;
			playBtn.addEventListener(MouseEvent.CLICK, play, false, 0, true);
		}
		private function select1(evt:Event):void {
			var item:Object = evt.target.selectedItem;
			easingType = Class(item.data);
		}
		private function select2(evt:Event):void {
			var item:Object = evt.target.selectedItem;
			easingMethod = item.label;
		}
		private function play(evt:MouseEvent):void {
			combobox1.enabled = false;
			combobox2.enabled = false;
			playBtn.mouseEnabled = false;
			var easing:IEasing = easingType[easingMethod];
			var itween:ITween = BetweenAS3.tween(rect, {x: 550}, {x: 50}, 2, easing);
			itween.addEventListener(TweenEvent.COMPLETE, complete, false, 0, true);
			itween.play();
		}
		private function complete(evt:TweenEvent):void {
			combobox1.enabled = true;
			combobox2.enabled = true;
			playBtn.mouseEnabled = true;
		}

	}

}


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

PENGPENG8
Åê¹ÆNo.45565
投稿日時: 2010-8-24 12:13
半人前
居住地: 愛知県
投稿: 49
使用環境:
Windows7Pro、FlashCS5Professional
Re: パラメータの型変換
ひろゆき様
レスありがとうございます。質問作法が不味く申し訳ありません。
要点だけを書くべきかと略してしまいましたが逆に手間を取らせてしまい今後、気をつけます。

ご助言のおかげでやっと下記のコードで目的のものが作成できました。
やはりIEasingクラスのインスタンス生成方法を教えていただいたことで方向性が見えました。
ただマズかったのは、Class()の引数がString型でもいいと考えていた点です。
それがあったためオーサリング時にステージに配置したコンボボックスのdataProviderのdataも
全部String型で入力していました。その後、型変換ができないエラーが出たのですが、
クラス名としての各イージングをdataに登録するが分からす迷ってしまっていました。
(そのオーサリング時から登録する方法も今後、調べていこうと思っています)
やっと解決できました。ありがとうございます。
package {

    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import fl.controls.ComboBox;
  import fl.data.DataProvider;

    import org.libspark.betweenas3.BetweenAS3;
    import org.libspark.betweenas3.tweens.ITween;
    import org.libspark.betweenas3.easing.*;
  import org.libspark.betweenas3.core.easing.IEasing;
    import org.libspark.betweenas3.events.TweenEvent;

    public class main extends MovieClip {

        private var itween:ITween;
        private var myMC:myChara;
    public var easingType_combo:ComboBox;
    public var easingMethod_combo:ComboBox;
    private var linear:Linear;
    private var easingType:Class = Linear;
    private var easingMethod:String = "easeIn";
    private var itemList1:Array;
    private var itemList2:Array;

    public function main() {
            	init();
        }

        private function init():void {
									
            	myMC = new myChara();			
            	addChild(myMC);
				
		itemList1 = new Array();
		itemList1.push({label: "Linear", value: Linear});
		itemList1.push({label: "Quad", value: Quad});
		itemList1.push({label: "Cubic", value: Cubic});
		itemList1.push({label: "Quart", value: Quart});
		itemList1.push({label: "Quint", value: Quint});
		itemList1.push({label: "Sine", value: Sine});
		itemList1.push({label: "Expo", value: Expo});
		itemList1.push({label: "Circ", value: Circ});
		itemList1.push({label: "Back", value: Back});
		itemList1.push({label: "Bounce", value: Bounce});
		itemList1.push({label: "Elastic", value: Elastic});

		easingType_combo.dataProvider = new DataProvider(itemList1);
				
		itemList2 = new Array();
		itemList2.push({label: "easeIn", value: "easeIn"});
		itemList2.push({label: "easeOut", value: "easeOut"});
		itemList2.push({label: "easeInOut", value: "easeInOut"});
		itemList2.push({label: "easeOutIn", value: "easeOutIn"});

		easingMethod_combo.dataProvider = new DataProvider(itemList2);
				
		easingType_combo.addEventListener(Event.CHANGE,setEasingType);
        }
		
	private function setEasingType(e:Event):void{

		easingType = Class(e.target.selectedItem.value);
		easingMethod = easingMethod_combo.selectedItem.value;
		var easing:IEasing = easingType[easingMethod];
		var itween:ITween = BetweenAS3.tween(myMC, {x: 600}, {x: 100}, 3, easing);

		itween.play();
	}
    }

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

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