我正在开发一款游戏,用户可以在这款游戏中获得按钮/徽章作为奖励.我估计总共会有大约500个奖项.
我想允许用户将他们的重复/不需要的徽章出售给银行并从银行购买新的徽章.
我在多个奖项框架中展示徽章.在徽章下方,我会显示计数,以及"买入"和"卖出"按钮.
我的问题是:处理SO MANY买卖按钮的最佳方法是什么?有没有办法编写1000个eventListeners和1000个eventHandlers?
一种可能的解决方案是逐步命名我的按钮,如"buy_mc1","buy_mc2"等.然后执行循环为此创建侦听器["buy_mc"+ i].但是,我必须非常确定我将这些正确地链接到奖项.
目前,我的数据库中有一个"award_mc"字段,它在我的.fla中存储了movieclip的名称.从那里,我可以访问相关的资产,比如count字段,例如:this [db.award_mc +"_ count"] .txt.
不幸的是,这种方法不适合循环访问.
也许我可以创建一系列与买/卖按钮同步的动画片段名称.例如:
myArray = {aMissionAward,anotherAward,ubernessAward};
我的按钮是:buy_0,buy_1,buy_2等.
当有人点击按钮时,我可以将buy_2链接到"ubernessAward",然后在数据库上查找"ubernessAward".
但是如何从按钮获取号码呢?即使我可以循环设置eventListeners,我是否必须设置个别事件的eventHandlers来处理正确的索引号?
我愿意接受其他方式的建议.
--------------------------编辑----------------------- -----
这是我的解决方案.Jens Struwe的道具指向我指向正确的方向.
我无法使用舞台上的按钮.显然,按钮是静态类.MovieClip是动态的,所以我可以通过使用MovieClip来实现这一点.这是我做的:
在舞台上添加了3个MovieClip.将它们命名为"mc0","mc1"和"mc2".
添加此AS3代码:
for (var i:Number=0; i<3; i++)
{
this["mc" + i].addEventListener( MouseEvent.CLICK, onMcClick );
this["mc" + i].awardKey = i;
}
function onMcClick( evt:MouseEvent ):void
{
trace("MC ID = " +(evt.target).awardKey);
switch ((evt.target).awardKey)
{
case 0:
trace(" Do stuff for 0");
break;
case 1:
trace(" Do stuff for 1");
break;
case 2:
trace(" Do stuff …Run Code Online (Sandbox Code Playgroud) 由于某种原因我得到以下错误
使用静态类型flash.display:将DisplayObject强制转换为可能不相关的类型flash.display:MovieClip
错误指向的行是下面的"addInfoBubble(item)"
for(var i:Number=0; i < MapContainer.numChildren; i++) {
var item:DisplayObject = MapContainer.getChildAt(i);
if(item!=null && item is MovieClip){ // make sure its a movieclip
trace('Found movieclip');
addInfoBubble(item);
item.addEventListener(MouseEvent.MOUSE_OVER, countryMouseOver);
item.addEventListener(MouseEvent.MOUSE_OUT, countryMouseOut);
}
}
Run Code Online (Sandbox Code Playgroud) 在我的AIR应用程序中,当用户创建一个新项目时,我想要一个弹出框出现在他们可以输入项目名称的位置.我理解这是如何通过制作我自己的弹出框类型,但是在那里使用NativeWindows做到这一点的方法?也就是说,我可以使用包含文本字段和按钮的系统镶边来制作窗口吗?
我在FlashDevelop中使用Flex 4和AIR 2.7.
如何将AS3中的值返回到javascript.我从JS调用AS3方法并希望AS3方法返回一个字符串:
//javascript
var string = swfObject["abcmethod"](arg1);
Run Code Online (Sandbox Code Playgroud)
我知道的唯一方法是添加一个回调方法,该方法在JS中从闪回调用.有没有更好的办法?
我有一个隐藏的DisplayObject(myObj.visible = false;).我提供了一个听众:
myObj.addEventListener(MouseEvent.CLICK, myHandler);
Run Code Online (Sandbox Code Playgroud)
通过myHandler永远不会开火.似乎MouseEvent.CLICK没有为隐藏的对象提供......我怎样才能听取MouseEvent.CLICK隐藏的对象?
我看得很远但我找不到任何关于如何从flash AS3写入CSV文件的资源.我知道flash不能单独写入它.我之前使用PHP写入txt文件,但现在我需要打开一个csv并插入/编辑已经在其中的条目.
我怎样才能做到这一点?
我有一个使用ActionScript 3.0的Flex应用程序.
对于我的应用程序中的任何元素,我想将鼠标光标设置为
- 专门用于指示允许"移动"或"拖动"操作 - 只要鼠标悬停在元素上方.
我该怎么做呢?
我试图弄清楚如何在OOP AS3.0中使用数组.一直在寻找答案或一些教程,但无法找到它.也许你可以解释一下.
这就是我所拥有的:
Gallery.as文件:
package {
import flash.display.MovieClip;
public class Gallery extends MovieClip {
public var can:Number;
public function Gallery() {
can = 10;
var impMyClass:Read = new Read(can);
trace (impMyClass.myArray[0]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是Read.as文件:
package {
import flash.display.MovieClip;
public class Read extends MovieClip {
public var rezalt:Number = new Number;
public var myArray:Array = new Array;
public function Read(can:Number) {
rezalt = can * 10 - 50 / 10;
trace('Read-shi')
myArray.push('Flash');
}
}
}
Run Code Online (Sandbox Code Playgroud)
到目前为止一切正常.
但是当我在Read.as文件中进行一些更改时,如下所示:
package {
import …Run Code Online (Sandbox Code Playgroud) 这就是我想要完成的事情;
随着对影片剪辑(cannon_mc)点击的射门被解雇(ball_mc)
较长的鼠标下降,球的射击速度应该增加.我的问题是;
实现这一目标的最有效方法是什么?用计时器或类似的东西;
var isMouseDown:Boolean = false;
var speed= 10;
myCannon.addEventListener(MouseEvent.MOUSE_DOWN,buttonPressed);
function buttonPressed(event:MouseEvent){
//trace("down");
isMouseDown == true;
if(isMouseDown == false)
{
speed == +1
}
}
Run Code Online (Sandbox Code Playgroud) 在回调函数中调用类的方法时,不能使用thisobject.
要调用该方法,在JavaScript中,我声明that的变量,分配this到that,并且使用that回调内部调用的方法this.
在动作脚本中,我是否必须像在javascript中那样做?
以下代码是that用于在回调内调用方法的示例.
动作中有更简单的方法吗?
class C {
private var that:C;
function C() {
that = this
}
public function f1():void {
var sp:Sprite = new Sprite;
sp.addEventListener(MouseEvent.CLICK, function():void {
this.f2(); // this doesn't work
that.f2(); // that works
});
}
public function f2():void {
trace('hello');
}
}
Run Code Online (Sandbox Code Playgroud) actionscript-3 ×10
flash ×4
callback ×2
actionscript ×1
adobe ×1
air ×1
apache-flex ×1
csv ×1
flash-cs5 ×1
flex4.5 ×1
hidden ×1
javascript ×1
mousedown ×1
nativewindow ×1
performance ×1
timer ×1