cs6 で実行されている flash actionscript 3 の場合、関数がマウス クリック イベントの後にのみ実行されるという問題があります。オンラインで同様の問題があること。
これは、私が作成しているプログラムの基本的なテンプレートです。これはフレーム 1 にあります。可能なボタンの1つをクリックすると、それが正しいボタンであるかどうかを確認し、次のフレームに移動するように設計されています
stop();
var buttons:Array=new Array(oport); //list of buttons
var correct:String="oport"; //button name
var gotoFrame:int=2;
var win:String=null;
const NEXT_FRAME:int=0;
var removeOtherListeners:Function=function():void{};
addListeners();
function addListeners():void {
for (var i:int=0; i<buttons.length; i++) {
buttons[i].addEventListener(MouseEvent.CLICK, checkButton);
}
}
function removeListeners():void {
for (var i:int=0; i<buttons.length; i++) {
buttons[i].removeEventListener(MouseEvent.CLICK, checkButton);
}
}
//checks button onclick and applies the functions above
function checkButton(e:MouseEvent):void {
removeListeners();
removeOtherListeners();
removeOtherListeners=function():void{};
Mouse.show();
if (e.currentTarget.name==win) {
gotoAndStop("win");
} else if (e.currentTarget.name==correct) {
if (gotoFrame<=0) {
nextFrame();
} else {
gotoAndStop(gotoFrame);
}
} else {
gotoAndStop("lose");
}
}
これは 2 番目のフレームにあり、このコードは cs4 用に設計されていますが、それでも動作するはずです。これは問題を提示するフレームです。フレーム 1 からこれに入る場合、入力を開始する前に画面をクリックする必要があります。画面をクリックする前に入力しても何も起こりません。
var lDown:Boolean = false;
var sDown:Boolean = false;
var dDown:Boolean = false;
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
function onKeyBoardDown(e:KeyboardEvent):void
{
if (e.keyCode == KeyCodes.L)
{
lDown = true;
}
if (lDown == true)
{
if (e.keyCode == KeyCodes.S)
{
sDown = true;
}
}
if (sDown == true)
{
if (e.keyCode == KeyCodes.D)
{
stage.removeEventListener(KeyboardEvent.KEY_DOWN, onKeyBoardDown);
gotoAndStop(5);
}
}
}
これは KeyCodes で参照されるクラスです
package {
public class KeyCodes {
public static const A:uint = 65;
public static const B:uint = 66;
public static const C:uint = 67;
public static const D:uint = 68;
public static const E:uint = 69;
public static const F:uint = 70;
public static const G:uint = 71;
public static const H:uint = 72;
public static const I:uint = 73;
public static const J:uint = 74;
public static const K:uint = 75;
public static const L:uint = 76;
public static const M:uint = 77;
public static const N:uint = 78;
public static const O:uint = 79;
public static const P:uint = 80;
public static const Q:uint = 81;
public static const R:uint = 82;
public static const S:uint = 83;
public static const T:uint = 84;
public static const U:uint = 85;
public static const V:uint = 86;
public static const W:uint = 87;
public static const X:uint = 88;
public static const Y:uint = 89;
public static const Z:uint = 90;
public function KeyCodes() {
// constructor code
}
}
}
回答やアドバイスをありがとうございます。