大家好日子。
我正在尝试用javascript开发一个闪避游戏。
如何解决我创建的所有3个敌人具有相同功能的部分?我希望他们分开。因为在所有这三个方面都应该朝着enemyrandom1()的结果方向前进;
这是我用来创造敌人的代码。
var item:
var enemy;
var enemys = new Array();
function createEnemy(){
enemy = new createjs.Shape();
enemy.graphics.beginFill("black").drawRect(0, 0, 10, 10);
enemy.x = (Math.random() * 400) +1;
enemy.y = 50
stage.addChild(enemy);
enemys.push(enemy);
console.log(enemys)
}
createEnemy();
createEnemy();
createEnemy();
function enemyforloop(){
for(var i=0;i<enemys.length;i++) {
item = enemys[i];
enemyMove();
}}
敌人的循环是在Ticker方法中。 Enemymove是一种旨在让敌人向一个方向移动的功能。在它到达某个放置后,它会被放入一个随机的位置然后继续。
function enemyMove(){
if(enemyrandom == 1)
{
item.y -= enemyspeed;
if(item.y < -10)
{
enemyrandom1();
}
}
function enemyrandom1(){
enemyrandom = Math.floor((Math.random() * 4) + 1);
enemyspeed = Math.random() *2 + 1;
if(enemyrandom == 1){
item.y = 300;
item.x = Math.floor((Math.random() * 400) + 1);
}
}
我跳过了敌人和敌人2,3,4所以它不会占用更多的空间。 我希望我对我的问题很清楚。
这就是它现在的样子http://jsfiddle.net/HqYeD/411/
答案 0 :(得分:0)
你已经确定了&#34;项目&#34;在全局范围内(类似于您在CreateJS社区中发布的初始示例,其中您将&#34;敌人&#34;在全局范围内),因此您遇到同样的问题。
相反,item
应声明 in 函数,并传递给&#34; enemyMove&#34;方法:
function enemyforloop(){
for(var i=0;i<enemys.length;i++) {
var item = enemys[i]; // NOTE THE VAR USED HERE!
enemyMove(item); // ITEM IS PASSED IN HERE!
}
}
function enemyMove(item){
// This code should not need to change.
}
确保删除&#34; var项目&#34;在代码的顶部。你应该只声明这样的事情,在他们的生命周期中不需要改变。您的enemy
和item
对象是暂时的,并经常更改。
希望这有帮助。
答案 1 :(得分:0)
摆脱全局enemyspeed
和enemyrandom
并将这些变量范围限定在每个敌人身上。
function createEnemy() {
enemy = new createjs.Shape();
enemy.graphics.beginFill("black").drawRect(0, 0, 10, 10);
enemy.x = (Math.random() * 400) +1;
enemy.y = 5;
// scope direction and speed to each enemy
enemy.enemyspeed = Math.random() *2 + 1;
enemy.enemyrandom = Math.floor((Math.random() * 4) + 1);
stage.addChild(enemy);
enemys.push(enemy);
console.log(enemys)
}
根据此更改您的其余代码......
function enemyMove() {
if(item.enemyrandom == 1) { // use scoped direction
item.y -= item.enemyspeed; // use scoped speed
if(item.y < -10)
{
enemyrandom1();
}
}
// ....
}
...类似地
function enemyrandom1() {
item.enemyrandom = Math.floor((Math.random() * 4) + 1);
item.enemyspeed = Math.random() *2 + 1;
if(item.enemyrandom == 1){
item.y = 300;
item.x = Math.floor((Math.random() * 400) + 1);
}
// ....
}