嗨,我采用了一种新的编码技术,这让我有点束手无策,我以前应用的许多概念现在采用了新的语法,有时会产生无法预料的问题。
好的,所以我制作多人Flash游戏。为了减少混乱,我不再使用多个 class.as 文件,而是拥有我的舞台和一个名为触发器的库对象,我将它放在舞台左上角的视线之外。然后我为这个movieclip对象创建一个class.as文件,并从那里实例化我程序中的所有其他内容——到目前为止,一个登录启动画面movieclip、一个游戏窗口movieclip、一个大厅movieclip,最后是游戏实例影片剪辑。它们适当地进出 .visible,当不使用时,它们存储在屏幕外的 x 和 y 值中,它们会根据用户输入顺序进行。另外我有存储importantMessages []、myplayerarray []、myArrowsarray []、myenemyarray []的公共数组
现在我目前最大的问题是我将从服务器接收我需要构建一个新的箭头和怪物单元的变量——所以我不喜欢movieclip orc,使用orc.speed、orc.xstartlocation orc.hp等等on,并且我有一个类似的箭头动画剪辑,带有 arrow.speed、arrow.gravity 等等。然后将这两个带有附加属性的影片剪辑推送到适当的公共数组中,而不是添加到舞台,而是添加到 stage.add(gamewindow:Movieclip) (这背后的原因是稍后如果我想一次移动舞台上的所有东西,它们已经定位在一个有凝聚力的影片剪辑上,然后我可以移动这个影片剪辑)
好的,现在解决问题,当我有两个 gamewindow.movieclips 碰撞时,就像一个箭头与一个兽人(让我们说 arrow13 hittest orc42 == true)我从 gamewindow:movieclip 中删除箭头movieclip对象并从它的 myarrowarray 中拼接它,然而,即使图形消失了,它仍会继续移动其当前轨迹并在途中撞击其他所有物体。我相信这背后的原因是因为在创建带有变量的movieclip期间,我在enterframe上包含了一个事件监听器,我认为它删除了剪辑而不是事件监听器(参见最底部的实例化箭头Movieclip类)
所以这让我想到了我的简洁问题:问题一:是否不仅可以使用 gamewindow.removeChild(arrow13),还可以使用 gamewindow.removeChild(arrow13[and all variables and eventlisteners])
问题二:我的第二个问题要简单一些:因为切换到movieclip()而不是object()我一直在使用蛮力,那么执行以下所有操作的1行代码将是什么:
var newarrow:MovieClip = new playerarrow();
newarrow.theowner = 用户名
newarrow.thespeed = 速度
newarrow.thegravity = 重力
newarrow.thepower = 力量
newarrow.arrownumber = 箭头
我的第三个问题可以追溯到我的闪屏电影剪辑的想法,我在玩他们的 z 值时遇到了麻烦
基本上,当我调用importantmessage()时,它会在左下角创建一个新的movieclip,它的alpha会淡化为0并且它会自行删除,但是我有一个问题,我的新movieclip窗口将覆盖这些消息,因为它们是在之后的瞬间添加的,我的程序中的示例是我将有 2 条消息吐出阶段。添加“尝试连接到服务器”“已连接”然后调用下一个主要功能并实例化 loginsplash:movieclip = new loginwindow - 我已经尝试过采用这个新的 stage.addchild(loginsplash) 并执行 setChildIndex(loginsplash, 0) 以及 -1 和 1。两个 1 都超出范围,0 产生:提供的 DisplayObject 必须是调用者的孩子。问题三:所以如果我有 gamemsg z = 0 gamemsg2 z = 1 和 loginsplash z = (0?),
=========================================
connection.addMessageHandler("newarrow",
功能(m:消息,用户名,速度,重力,功率,箭头)
{
var newarrow:MovieClip = new playerarrow();
newarrow.theowner = username
newarrow.thespeed = speed
newarrow.thegravity = gravity
newarrow.thepower = power
newarrow.arrownumber = arrowid
for each(var p in myplayerarray)
if (p.mpname == username){
newarrow.x = p.theanimation.x + 100
newarrow.y = p.theanimation.y + 100
}
myarrowarray.push(newarrow)
gw.addChild(newarrow)
newarrow.addEventListener(Event.ENTER_FRAME, arrowenterframe)
function arrowenterframe(e:Event){
newarrow.thegravity = 0 //+=.6
speed = 5
newarrow.x = newarrow.x+speed
newarrow.y = newarrow.y + newarrow.thegravity
//ROTATE FUNCTION
newarrow.rotation = Math.atan(newarrow.thegravity / speed ) /(Math.PI/180)
if (speed < 0) {newarrow.rotation +=180}
for each(var d in myenemyarray){
if (newarrow.hitTestObject(d.orcicon)){
connection.send("arrowhitmonster", newarrow.arrownumber, d.monsternumber)
trace("hitting monster")
}
}
if(newarrow.hitTestObject(gw.theground)){
}
}
})