Actionscript 3 如何使用(调用)函数中的变量(AS3)?

Actionscript 3 如何使用(调用)函数中的变量(AS3)?,actionscript-3,flash,Actionscript 3,Flash,我正在尝试编程一个角色(perso),他在地图中移动并生成一个数组。 在这里,我的变量“t”称我的“Tuiles”MovieClip,创建了一个网格(格栅),在我的“map”数组中,每个新的瓷砖都是“1”。 我首先修复了具有一个子平铺的碰撞函数,因此,我创建了“映射”和“网格”函数。我需要“t”变量来创建世界和角色冲突。 如果我在函数“creeDecor”中添加变量,Flash会生成一个好的变量,但在我的碰撞函数中不存在变量“t”。 若我把“t”变量作为一般变量放在代码的顶部,Flash会在舞台

我正在尝试编程一个角色(perso),他在地图中移动并生成一个数组。 在这里,我的变量“t”称我的“Tuiles”MovieClip,创建了一个网格(格栅),在我的“map”数组中,每个新的瓷砖都是“1”。 我首先修复了具有一个子平铺的碰撞函数,因此,我创建了“映射”和“网格”函数。我需要“t”变量来创建世界和角色冲突。 如果我在函数“creeDecor”中添加变量,Flash会生成一个好的变量,但在我的碰撞函数中不存在变量“t”。 若我把“t”变量作为一般变量放在代码的顶部,Flash会在舞台的右下角生成一个平铺,碰撞功能运行良好

我怎么能把它们混合两次呢? 可能吗

我让你知道我的全部代码。如果你想让它工作,你只需要创建一个MovieClip类名“Tuiles”(square:32*32)和第二个MC“Perso”

//创建个人
var perso:perso=new perso();
var格栅:MovieClip=新的MovieClip();
变量t:Tuiles=新Tuiles();
变量T:int=32;
变量映射:数组=[
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
]
//临时库存
var股票:数组=[
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
]
creeDecor()
initHero();
stage.addEventListener(KeyboardEvent.KEY_DOWN,键盘向下);
stage.addEventListener(KeyboardEvent.KEY_UP,clavierUp);
stage.addEventListener(Event.ENTER_FRAME,动画);
//舞台碰撞
var-minX=0;
var-minY=0;
var maxX=舞台宽度-个人宽度;
var maxY=舞台高度-个人高度;
var=5;
函数键盘下载(e)
{
开关(如钥匙代码)
{  
案例37:
perso.speedX=-speedHero;
打破
案例39:
perso.speedX=speedHero;
打破
案例38:
perso.speedY=-speedHero;
打破
案例40:
perso.speedY=速度英雄;
打破
}
}
函数键盘(e)
{
开关(如钥匙代码)
{
案例37:
perso.speedX=0;
打破
案例39:
perso.speedX=0;
打破
案例38:
perso.speedY=0;
打破
案例40:
perso.speedY=0;
打破
}
}
函数动画(e)
{
animeHero();
}
//阶段边界碰撞函数
函数animeHero()
{       

如果(perso.x+perso.speedX>=minX&&perso.x+perso.speedX=minY&&perso.y+perso.speedY=t.x+t.width-speedHero&&perso.x=t.x-2&&perso.x+perso.width=t.y+t.height-speedHero&&perso.y=t.y-2&&perso.y+perso.height您想要制作许多不同的
文件,并且还要检查每一个文件的碰撞情况。听起来你原来是在
creeDecor()
中制作新的
Tuiles
,但除非你将新的磁贴存储在该磁贴之外,否则只有
creeDecor()
知道这些磁贴。(这就是为什么Flash说
t
collision()
中不存在的原因。)可能会有所帮助,如果您还没有阅读过该文档的其他部分,也可能会有所帮助

因此,您可以在顶层准备所有
Tuiles
的列表,如:

var tList:Vector.<Tuiles> = new Vector.<Tuiles>();
然后,您可以使用


如果您只有简单的方块,那么可能有比多次使用
hitTestObject
更快的碰撞检测方法,因此如果速度较慢,调整该方法可能是一个很好的下一步。

非常感谢!这真的很有用!我想问您,我可以采取哪种方法为几个平铺帧生成多个反应?我很抱歉不确定我是否遵循,但您是否为
Tuiles
创建了一个自定义类,或者它只是从库中自动导出的MovieClip?您可以在
Tuiles中编写自己的函数。正如所需。(例如)不,这只是库中的MovieClip!好的!再次感谢David
var tList:Vector.<Tuiles> = new Vector.<Tuiles>();
if(f>0)  {
    var newT:Tuiles = new Tuiles();
    tList.push(newT);
    // Set up newT's position etc...
for each (var t:Tuiles in tList) {
    if (perso.hitTestObject(t))
        // Your collision code...
    }
}