ActionScript 誰かが物凄い勢いで解答するスレ 17

このエントリーをはてなブックマークに追加
143Now_loading...774KB
FlashCS3 AS3

クラスから
stage.addEventListener(KeyboardEvent.KEY_UP, keyCheck);
とかするとstageがnullとかエラーが出てしまいます。

stageなしだとフォーカスが必要とのことですが、
"マウスクリックしてフォーカス"とかなしで
キー入力対応させるにはどうしたらよいですか?
144Now_loading...774KB:2007/08/30(木) 14:06:05 ID:fxDqXm13
意味がよくわからんけど、stageプロパティ使いたいならそのクラスに
DisplayObject含むクラス継承させときゃいいんじゃね?
145Now_loading...774KB:2007/08/30(木) 14:07:55 ID:fxDqXm13
あと、ムービーにフォーカスが無い時のキーボードイベント拾う事は不可能。
それできたらパスワードの入力の時とかにキーのログ拾われるから禁止になった。
146Now_loading...774KB:2007/08/30(木) 14:35:40 ID:ljrzh0lg
>>144
レスありがとうございます。
public function Stopwatch(initTime:Number=3) {
timetotal = initTime*60;
outputText = new TextField();
outputText.text = timetotal;
addChild(outputText);
myTimer = new Timer(1000,timetotal);
myTimer.addEventListener("timer", counter);
stage.addEventListener(KeyboardEvent.KEY_UP, keyCheck);
}
public function keyCheck(event:KeyboardEvent) {
trace(event.keyCode);
myTimer.start();
}

なにかキーを押したらTimerのカウント数を表示するだけのクラスなんですが、
stage.addEventListener(KeyboardEvent.KEY_UP, keyCheck);

addEventListener(KeyboardEvent.KEY_UP, keyCheck);
とすればカウントが表示されるのですが、
テキストフィールドにフォーカスしないとキー入力を受け付けてくれませんでした。
調べたらstage.を書かないとフォーカスなしでは動かないとのことなので
書いたのですが今度はエラーが出てしまいました。
DisplayObjectを入れろとのことで、
import flash.display.DisplayObject;
としたらエラーは出ないのですがテキストが表示されなくなりました。
stage.addChild(outputText);とかにしても同じでした。
147Now_loading...774KB:2007/08/30(木) 15:06:42 ID:udV3bP6I
そもそもそのクラスは何を継承してるの?
148Now_loading...774KB:2007/08/30(木) 15:32:11 ID:fxDqXm13
こんなで、
package {
import flash.display.Sprite;import flash.utils.Timer;import flash.events.*; import flash.text.TextField;
public class TimePanel extends Sprite {
var myTimer:Timer,_t:TextField;
public function TimePanel() {
_t = new TextField();_t.text = "100";addChild(_t);
myTimer= new Timer(1000);
myTimer.addEventListener(flash.events.TimerEvent.TIMER , counter);
setEvent();
}
public function setEvent() {
if (stage) {
trace("画面に追加されてます");
stage.addEventListener(KeyboardEvent.KEY_UP, keyCheck);
} else {
trace("画面に追加されてません");
}
}
public function counter(e) {
_t.text = String(Number(_t.text)-1);
}
public function keyCheck(e) {
trace(e.keyCode);myTimer.start();
}
}
}
149Now_loading...774KB:2007/08/30(木) 15:33:20 ID:fxDqXm13
うごかすにはこんなじゃね?

var t=new TimePanel()
addChild(t)
t.setEvent()
ようするに、stageまで辿りたいなら表示リストに乗っけないと駄目なんでない?
150Now_loading...774KB:2007/08/30(木) 15:36:42 ID:fxDqXm13
あとは、FlashCS3だったらドキュメントクラスにしときゃ、stageで確実にStage拾えるんじゃね?
151Now_loading...774KB:2007/08/30(木) 16:09:44 ID:ljrzh0lg
>>148-150
これの追加でいけました!ありがとうございます。

stopwatch.setEvent();

public function setEvent() {
if (stage) {
trace("画面に追加されてます");
stage.addEventListener(KeyboardEvent.KEY_UP, keyCheck);
} else {
trace("画面に追加されてません");
}
}