![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
ActionScript3.0のクラス定義について質問なのですが、回転するインスタンスがあり(それは最初からステージに置いてあります)、それがマウスが近づくにつれてだんだん回転が速くなるのを作りたいのですがなかなかうまくいきません。
クラス定義をせずに書いた場合ですとうまくいきましたが、それを外部ファイルにカスタムクラス(と言うんでしょうか?)をした場合、やり方がいまいち理解できずにうまくいかないんです。
クラス定義せずに書いたのはこちらです↓
addEventListener(Event.ENTER_FRAME, onEnterframe);
function onEnterframe(eventObj:Event):void {
//インスタンスの座標
var hanePt:Point=new Point(hane_mc.x,hane_mc.y);
//マウスの座標
var mousePt:Point=new Point(stage.mouseX,stage.mouseY);
//インスタンスとマウスの距離
var distance:Number=Point.distance(hanePt,mousePt);
//距離が200以下の時に回転する
if(distance<200){
hane_mc.rotation+=2000/Math.max(50,distance);
}
これですとちゃんと動きました。
そしてクラス定義にしたのがこちらです↓
メインのタイムラインのところにはこちらを書いて↓
var mousePt:Point=new Point(stage.mouseX,stage.mouseY);
var haneobj1:Hane = new Hane(hane_mc);
haneobj1.moveHane(mousePt);
外部ファイルにはこちらを書きました↓
package{
import flash.display.MovieClip;
import flash.events.Event;
import flash.geom.Point;
public class Hane extends MovieClip{
//インスタンスのプロパティ
var hane_mc:MovieClip;
var ballPt:Point;
var distance:Number;
public function Hane(hane:MovieClip){
hane_mc = hane;
ballPt = new Point(hane_mc.x,hane_mc.y);
}
public function moveHane(mou:Point):void{
distance = Point.distance(ballPt,mou);
addEventListener(Event.ENTER_FRAME, kaitenHandler);
}
public function kaitenHandler(ev:Event):void{
//距離が200以下の時に回転する
if(distance<200){
hane_mc.rotation+=2000/Math.max(50,distance);
}
}
}
}
とくにエラーは出ないのですが、動くときと動かないときがあります。
動いたとしても一定の動きで、マウスが近づいてもとくに回転速度は変わりません。
どこか間違っているところあればご教授してください!!
よろしくお願いします!!!
No.2ベストアンサー
- 回答日時:
>>1さん来ないみたいなので代わりに補足レス
>未定義stage
Haneクラスのインスタンスが
stageにaddChildされてないと
Haneインスタンスのstageはnullです
もう少しいうとこのHaneクラス自体は
MovieClipの拡張クラスである必要性が
あんまりないように思います
hane_mcにリスニングさせればいいかと思います
public function moveHane(mou:Point):void{
distance = Point.distance(ballPt,mou);
addEventListener(Event.ENTER_FRAME, kaitenHandler);
}
public function kaitenHandler(ev:Event):void{
if(distance<200){
hane_mc.rotation+=2000/Math.max(50,distance);
}
↓
public function moveHane():void{
hane_mc.addEventListener(Event.ENTER_FRAME, kaitenHandler);
}
public function stopHane():void{
hane_mc.removeEventListener(Event.ENTER_FRAME, kaitenHandler);
}
private function get dst():Number{
return new Point(hane_mc.mouseX,hane_mc.mouseY).length
}
public function kaitenHandler(ev:Event):void{
if(dst<200){
hane_mc.rotation+=2000/Math.max(50,dst);
}
片づけ用にstopHane()を用意
distanceをdstとしてgetter実装
これでdistanceとballPtプロパティは不要になってます
とても分かりやすい説明有り難うございました!!
おかげでスッキリしました!
getterの使い方も分かったので大変勉強になりました。
ありがとうございます!!
No.1
- 回答日時:
1) var mousePt:Point=new Point(stage.mouseX,stage.mouseY);
2) var haneobj1:Hane = new Hane(hane_mc);
3) haneobj1.moveHane(mousePt);
1) でマウスの座標を取得した後に、、
3) でマウスの座標を引数で渡していますね。
マウスの座標は 1) で1回しか取得していないので、常に同じ数値で計算しています
なので、一定の動きをしています。
マウスの座標を常に取得してあげましょう。
この回答への補足
すみません追記です。
できれば
var mousePt:Point=new Point(stage.mouseX,stage.mouseY);
を外部のファイルに記述したいのですが、記述すると「未定義stage...」とエラーが出てしまいます。
これは何かインポートしなくてはならないのでしょうか?
もしよろしければ助言頂けると嬉しいです!
ありがとうございます!!
はい、一応そこまではそうだろうなと思ってはいたのですが、そこからどうすればいいのか色々試したのですがなかなかうまくいかず。。。
もう少し助言を頂けると嬉しいです!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 引数 戻り値のあるメソッド 3 2023/02/12 06:23
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript 定積分の近似値を計算する関数composite_newton_cotesをつくりたい 1 2023/01/18 14:09
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像表示をアルファでフェード...
-
○秒間実行 AS3
-
アセンブリ言語のcasl2について...
-
photoshopで書いた四角の枠の中...
-
python ボタンを押すと複数の関...
-
VBAからPDFのテキストフィールド
-
RPG(AS400)の本、サイトってあ...
-
【VB.NET】別Formのボタンが押...
-
static関数がmapファイルに載ら...
-
VBAで改行の入ったデータの正規...
-
accessの検索について質問です...
-
360度パノラマ写真をループでき...
-
AS3.0 でフェードイン、
-
フォームのテキストの入力数字...
-
【Photoshop】レイヤー効果の境...
-
場面が移り変わるときかっこよ...
-
外部テキストファイルより座標...
-
Flashでレーダーチャート
-
多言語を混在できるか。
-
ウインドウハンドルとインスタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画像表示をアルファでフェード...
-
ムービークリップ変換について...
-
ActionScript スクロールメニュー
-
何で重なり合おうとするんでし...
-
ステージにある複数のインスタ...
-
for文を使ったボタン
-
配列に入れたムービークリップ...
-
○秒間実行 AS3
-
Actionscript3.0 子のイベント...
-
Actionscript3.0のクラス定義の...
-
FLASH 定型のASを登録しといて...
-
addChildの使い方
-
外部テキスト読み込みでマーキ...
-
AS3の配列の中にアクセス
-
関数を停止するには。。。。
-
as3 addEventListenerの動的な...
-
actionscript3.0 オブジェクト...
-
actionscript3.0 データ型について
-
複数mcのランダム再生とmc指定...
-
photoshopで書いた四角の枠の中...
おすすめ情報