![]() |
|
||||||||||
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
Доброго времени суток.
Прошу прощения за дурацкий вопрос, но долблюсь уже сутки - решить не получается. Есть функция вызываемая таймером несколько раз. Функция добавляет с помощью addChild на сцену экземпляр следующего объекта: При добавлении у нового экземпляра меняются характеристики. Проблема в том, что они меняются у всех объектов добавленных до этого. Изменение характеристик находится внутри тела функции, которая и добавляет новый экземпляр. Как каждый новый экземпляр наделять новыми характеристиками не меняя их у вызванных ранее экземпляров? |
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
Извиняюсь, сразу ответить не получилось. Вот код:
//враг и его деятельность var countAtack:Number = 0;//для замены таймера при подсчете потерь энергии героя при контакте с врагом var count:Number = 0;//для замены таймера при подсчете потерь энергии врага при контакте с героем var distanceXYe:Number;//значение расстояния (враг - герой) var speedEnemy:Boolean;//разрешаем(или запрещаем) перемещение врага var strongEnemy:Number;//уровень атаки врага (задается случайно) var healthEnemy:Number;//уровень защиты врага (задается случайно) var speedXYe:int = 1.2;//скорость врага var lifeEnemy:uint;//энергия(жизни) врага function f_enemyAppeared () { //добавление врага на сцену var enemy:Enemy = new Enemy(); enemy.x = Math.floor(Math.random() * 400 + 30 ); enemy.y = Math.floor(Math.random() * 400 + 30 ); this.lifeEnemy = Math.floor(Math.random() * 22); this.strongEnemy = Math.floor(Math.random()*10) + 1; this.healthEnemy = Math.floor(Math.random()*10) + 1; addChild(enemy); //перемещение врага enemy.addEventListener(Event.ENTER_FRAME, f_enemyGo); function f_enemyGo (e:Event) { var enemy:MovieClip = e.currentTarget as MovieClip; var distanceXe = hero.x - enemy.x; var distanceYe = hero.y - enemy.y; var distanceXYe = Math.sqrt(distanceXe*distanceXe + distanceYe*distanceYe); var speedXe = speedXYe * distanceXe/distanceXYe; var speedYe = speedXYe * distanceYe/distanceXYe; if(distanceXYe < 10){ speedEnemy = false; }else{ speedEnemy = true; } if(speedEnemy == true){ enemy.x += speedXe; enemy.y += speedYe; } //если у врага кончились жизни или наступил день - удалим его if(day == true || lifeEnemy <= 0){ removeChild(enemy); enemy.removeEventListener(Event.ENTER_FRAME, f_enemyGo); } //враг атакует if(distanceXYe < 15 && ++countAtack%40 == 0){ lifeHero -= strongEnemy/healthHero; } //враг получает урон слева if(distanceXYe < 10 && enemy.x <= hero.x && ++count%10 ==0 && heroBeatLeft == true){ lifeEnemy -= strongHero/healthEnemy; } //враг получает урон справа if(distanceXYe < 10 && enemy.x >= hero.x && ++count%10 ==0 && heroBeatRight == true){ lifeEnemy -= strongHero/healthEnemy; } //анимация жизней врага enemy.gotoAndPlay(Math.floor(11 - lifeEnemy)); } } |
|
|||||
|
Регистрация: Mar 2015
Сообщений: 64
|
А можно это сделать в кадре. Дело в том , что весь проект написан в кадрах , а переносить в классы нет времени (сроки поджимают).
Добавлено через 31 час 57 минут Попробовал другой вариант решения проблемы: Создаю объект и помещаю в массив. Затем в ENTER_FRAME создаю цикл и пробегаю по массиву. Создал тестовую мини-игру (нажимаешь на кнопку появляется кролик в рандомных координатах и движется по оси Х. Затем кликаю по сцене и появляется монстр. Если расстояние между монстром и кроликом меньше определенной дистанции кролик останавливается), вот код: //создадим массив var myArray:Array = new Array(); //добавим в массив объекты var rabbit:Rabbit; myArrayAdd.addEventListener(MouseEvent.CLICK, fAdd1); function fAdd1 (e:MouseEvent) { var rabbit:Rabbit = new Rabbit(); rabbit.x = Math.floor(Math.random() * 11) * 20; rabbit.y = Math.floor(Math.random() * 11) * 20; addChild(rabbit); myArray.push(rabbit); rabbit.addEventListener(Event.ENTER_FRAME, fRabbitDo); trace(myArray); } //удалим из массива объекты myArrayDelete.addEventListener(MouseEvent.CLICK, fDelete1); function fDelete1 (e:MouseEvent) { myArray.splice(length - 1); rabbit.removeEventListener(Event.ENTER_FRAME, fGooDo); trace(myArray.length); } function fRabbitDo (e:Event) { for (var i:Number = 0; i < myArray.length; i++){ myArray[i].x += Math.random(); } } stage.addEventListener(MouseEvent.CLICK, fMonster); function fMonster (e:MouseEvent) { monster.x = mouseX; monster.y = mouseY; } //определим дистанцию (монстр - кролик) и контакт монстра и кролик var distance:Number;//расстояние (монстр - кролик) stage.addEventListener(Event.ENTER_FRAME, fDistance); function fDistance (e:Event) { for (var qqq:Number = 0; qqq < myArray.length; qqq++){ var distanceX = monster.x - myArray[qqq].x; var distanceY = monster.y - myArray[qqq].y; distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY); if(distance <= 40){ myArray.splice(myArray[qqq]); trace(myArray.length); } } } P.S. Продолжаю работать в кадрах. И вообще - то что я задумал можно сделать в кадрах? |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:57. |
|
|
« Предыдущая тема | Следующая тема » |
|
|