我正在尝试制作类似于Synthesia的基于钢琴的Flash游戏。我已经制作了一个符号" char"的多个实例(char0,char1等)。 &安培;将它们存储在一个数组中,以表示位于不同位置的落下的钢琴音符。以下是我在音符和音符之间实现的碰撞检测代码。按键。
但是随着我所包含的笔记越多,滞后就会增加。如同,120 FOR循环迭代显着减慢了游戏速度。
for(var i = 0; i <120; i++){
_root.charac[i] = _root['char'+i]; //instances stored in charac array
var ch = _root.charac[i];
ch._y += 1; //speed of falling notes
if(ch._x>this._x && ch._x<this._x+this._width && ch._y>this._y && ch._y<this._y+this._height && !this.isBlack){
_root.playSound(this);
}
}
任何优化此代码的方法?或者有没有其他方法来存储那么多实例(注释)?
答案 0 :(得分:0)
问题是你需要120多个请求,你最好检查是否有来自所有键的1个键,而不是将if语句附加到所有键。
例如: 如果鼠标按下,则检查通过存储在数组中的每个键的同名来击中哪个键。
它已经有一段时间了,我不确定你把项目放在一起的确切程度。理论:在数组中有120个键...在mouseMove上获取鼠标x和y坐标的位置,在mouseDown上(单击)...将鼠标x,y与数组x,y中的当前键进行比较位置..通过遍历数组中的每个键值,直到你有一个匹配...你有被击中的键...现在你有两个事件的所有键......
它的逻辑,类似于光线投射
你会得到这个想法:)