私は牌合わせゲームを作り、3x3 マス目から 1 ~ 9 を示す 3 つの数字を選び、3 つの数字の合計が目的の数字 (通常は 6 ~ 24、6 = 1) と同じであれば+2+3、および 24=7+8+9)、3 つの数字が消えます。3 つの数字が消える間、3 つの新しい乱数が表示されます。
私のLIBRARYでは、それぞれクラスSimpleButtonとしてbtnO1~O9と呼ばれる9つを作成し、別のクラスとしてbtnC1~C9と呼ばれる別の9つを作成します。SimpleButtonSimpleButton
私のゲームを実現するための私の考えは: ゲームの最初にSimpleButton、画面内に 18 の be が作成され、半分の部分が btnO1 ~ btnO9 で、残りの半分の部分が btnC1 ~ btnC9 であり、btnC1 ~ btnC9 は非表示にします。したがって、次のようになります。

ユーザーがボタンを押すと、次のように緑色に変わり、番号を取得したことを人々に知らせます。

次に、もう一度クリックしてオプションをキャンセルします。
ピックアップした 3 つの数字が上記の目標に一致する場合、3 つの数字は消え、スコアは毎回 500 ポイント追加されます。

これまでのところ、私のゲームは思い通りに作られていますが、消えた3つの数字を置き換えるために新しい3つの数字を作成しようとすると、何も追加されていないか、1つまたは2つの数字しか追加されていないことがわかります.. ....
原因を探ってみたところ、数字が同じSimpleButtonだと作成できないことがわかりました。
たとえば、シーンで btnO1 を作成した場合、別の btnO1 を作成しようとすると、btnO1( the SimpleButton) の別の名前を actionscript( 3 でのみ発生するのか、2 と 3 の両方で発生するのかわかりません)、エラーまたは例外がデバッグ ウィンドウに表示されない原因となります。
同じカスタマイズを同時に作成することの問題を知っている人SimpleButtonはいますか、それとも解決できますか?
私のコードは次のとおりです。
var goal:int=6+Math.random()*19; // match number, 6~24 usually
txGoal.text=""+goal;
var numArr:Array=new Array(1,2,3,4,5,6,7,8,9); // original 1~9 number
var pickArr:Array=new Array(0,0,0); // array to find the position be clicked
var pickNum:Array=new Array(0,0,0); // array to find the number be clicked
var count:int=0; // index for above array
var sum:int=0; // check with goal
var score:int=0;
var canClick:Boolean=true; // can click only after anime stop
initNum(); // first round is 1~9, after first round will random
function initNum()
{
for(var i:int=0;i<numArr.length;i++)
{
origin(numArr[i],i);
clicked(numArr[i],i); // the trick for if number be clicked will show green one
}
}
var bub:int=0;
var bubbleT:Timer = new Timer(25);
var newW:int=0;
var newH:int=0;
// Timer to do animation of disappear
bubbleT.addEventListener(TimerEvent.TIMER, bubbleoutHandler);
function bubbleoutHandler(event:TimerEvent):void
{
bub++;
for(var i:int=0;i<pickArr.length;i++)
{
var nam:String=pickArr[i]+"_"+pickNum[i];
if(bub==1)
{
getChildByName("c"+nam).removeEventListener(MouseEvent.CLICK,cHandler); // remove the event of the three numbers
removeChild(getChildByName("c"+nam)); // remove the three numbers
getChildByName("o"+nam).visible=true; // show original number that do animation of disappear
newW=getChildByName("o"+nam).width;
newH=getChildByName("o"+nam).height;
getChildByName("o"+nam).width=newW*(0.8); // change bubble's size smaller at first
getChildByName("o"+nam).height=newH*(0.8);
}
else
{
var scale:Number=1+(bub*0.05);
getChildByName("o"+nam).width=newW*scale; // change bubble's size bigger gradually as bubble will blow up
getChildByName("o"+nam).height=newH*scale;
}
if(bub==4)
{
getChildByName("o"+nam).removeEventListener(MouseEvent.CLICK,oHandler); // remove event of origin numbers
removeChild(getChildByName("o"+nam)); // remove numbers as it disappeared
}
}
if(bub==4)
{
count=0;
sum=0;
bub=0;
bubbleT.stop(); // the three numbers disappeared
newT.start(); // try to new three numbers
}
}
var bnew:int=0;
// timer to do animation of create new numbers
var newT:Timer = new Timer(100);
newT.addEventListener(TimerEvent.TIMER, bubblenewHandler);
function bubblenewHandler(event:TimerEvent):void
{
bnew++;
for(var i:int=0;i<pickArr.length;i++)
{
var newnum:int=Math.random()*9+1; // random number from 1~9
var newpos=parseInt(pickArr[i]); // the new number should appear at original place
origin(newnum,newpos);
clicked(newnum,newpos);
}
// Originally do animation of adding new numbers, just change bubble size
//var nam:String=pickArr[i]+"_"+pickNum[i];
//var scale:Number=(bnew*0.2);
//getChildByName("o"+nam).width=newW*scale;
//getChildByName("o"+nam).height=newH*scale;
if(bnew>=2)
{
canClick=true;
bnew=0;
newT.stop();
}
}
// the function of create numbers( SimpleButton)
function origin(n:int,i:int)
{
var o:SimpleButton;
if(n==1)
o=new btnO1();
else if(n==2)
o=new btnO2();
else if(n==3)
o=new btnO3();
else if(n==4)
o=new btnO4();
else if(n==5)
o=new btnO5();
else if(n==6)
o=new btnO6();
else if(n==7)
o=new btnO7();
else if(n==8)
o=new btnO8();
else
o=new btnO9();
o.name="o"+i+"_"+n;
o.x=numX(n);
o.y=numY(n);
o.tabEnabled=false;
o.visible=true;
o.addEventListener(MouseEvent.CLICK,oHandler);
addChild(o);
}
// if press the number, the number turn to green, that means, origin number will hedden, and clicked number show up
function oHandler(e:Event):void{
if(canClick==true)
{
e.currentTarget.visible=false;
var nam:String=e.currentTarget.name.substr(1);
getChildByName("c"+nam).visible=true;
var val:int=parseInt(e.currentTarget.name.substr(3));
var pos:int=parseInt(e.currentTarget.name.substr(1,1));
// to record which three numbers be pressed
pickNum[count]=val;
// to record where the three numbers be pressed, then the new three numbers be created should take place the number in the same place.
pickArr[count]=pos;
count++;
sum+=val;
// if pressed three number that match the goal, do animation of disappear
if(count==3)
{
if(sum==goal)
{
score+=500;
txScore.text=""+score;
canClick=false;
bubbleT.start();
}
}
}
}
// function of create green numbers, show up when user click origin numbers
function clicked(n:int,i:int)
{
var c:SimpleButton;
if(n==1)
c=new btnC1();
else if(n==2)
c=new btnC2();
else if(n==3)
c=new btnC3();
else if(n==4)
c=new btnC4();
else if(n==5)
c=new btnC5();
else if(n==6)
c=new btnC6();
else if(n==7)
c=new btnC7();
else if(n==8)
c=new btnC8();
else
c=new btnC9();
c.x=numX(n);
c.y=numY(n);
c.name="c"+i+"_"+n;
c.tabEnabled=false;
c.visible=false;
c.addEventListener(MouseEvent.CLICK,cHandler);
addChild(c);
}
// if user click the green number( SimpleButton) again, then cancel their option
function cHandler(e:Event):void{
e.currentTarget.visible=false;
var nam:String=e.currentTarget.name.substr(1);
getChildByName("o"+nam).visible=true;
var num:int=parseInt(e.currentTarget.name.substr(1,1));
popout(num);
}
// pop out the numbers that user cancelled their option of the recording array
function popout(num:int)
{
for(var i in pickArr)
{
if(pickArr[i]==num)
{
sum-=pickNum[i];
pickNum[i]=0;
pickArr[i]=0;
count--;
break;
}
}
}
// fix position of numbers
function numX(n:int)
{
if(n==1||n==4||n==7)
return 109.3;
else if(n==2||n==5||n==8)
return 274.3;
else
return 440.3;
}
function numY(n:int)
{
if(n==1||n==2||n==3)
return 161;
else if(n==4||n==5||n==6)
return 245;
else
return 330;
}
stop();
コードは最初のフレームにあるので、最後に stop() を追加します。また、古い を削除する前にイベントを削除しSimpleSuttonます。
これまでのゲームリンクは次のとおりです。
ゲームで私を助けてくれたおかげで紹介ページを追加します, よろしくお願いします!