Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с записью переменной в массив (http://www.flasher.ru/forum/showthread.php?t=147728)

cfanya 12.12.2010 14:49

Проблема с записью переменной в массив
 
Вложений: 1
Код AS3:

stop();
 
var randomize:Number = 1;
var Max:int = 1;
 
// Характеристики персонажа
var strange:int = 10;
var agility:int = 12;
var endurance:int = 8;
var hits:int = 100;
var weapon:int = 5;
var armour:int = 3;
var HeroTime:int = (10-agility);
var damage:int = strange;
strange_fld.text = String(strange);
agility_fld.text = String(agility);
endurance_fld.text = String(endurance);
hits_fld.text = String(hits);
 
// Характеристики врага
var eStrange:int = 12;
var eAgility:int = 10;
var eEndurance:int = 15;
var eHits:int = 100;
var eWeapon:int = 3;
var eArmour:int = 1;
var EnemyTime:int = 8;
var eDamage:int = eStrange;
eStrange_fld.text = String(eStrange);
eAgility_fld.text = String(eAgility);
eEndurance_fld.text = String(eEndurance);
eHits_fld.text = String(eHits);
 
// ********************** Массивы ******************************
var TimeLine:Array = new Array();        // Общая шкала времени
var HeroAction:Array = new Array();        // Массив, содержащий сведения о следующем действии героя
var EnemyAction:Array = new Array(); // Массив, содержащий сведения о следующем действии врага
 
HeroAction[0] = "Яростная атака";
HeroAction[1] = "Рубящий удар";
HeroAction[2] = "в корпус";
 
// Тип удара        HeroAction[0]
var CombatStyle:Array = new Array("Яростная атака", "Глухая оборона", "Держать дистанцию");
 
// Тип удара  HeroAction[1]
var HitType:Array = new Array("Рубящий удар", "Колющий удар", "Пинок", "Удар щитом", "Толчек", "Обманный удар");
 
// Место удара        HeroAction[2]
var HitPlace:Array = new Array("в голову", "в корпус", "в правую руку", "в левую руку", "по ногам");
 
// ******************* Выводим тип атаки (HitType) ******************************
// Слушатели событий
nextattack_btn.addEventListener(MouseEvent.CLICK, nextattack);
previousattack_btn.addEventListener(MouseEvent.CLICK, previousattack);
 
hittype_fld.text = String(HitType[0]);
var i:Number = 0;
 
function nextattack(event:MouseEvent):void
{
        if (i < 5) {i=i+1;}
        hittype_fld.text = String(HitType[i]);
        HeroAction[1] = HitType[i];                // Заносим тип удара в HeroAction
        }
 
function previousattack(event:MouseEvent):void
{
        if (i > 0) {i=i-1;}
        hittype_fld.text = String(HitType[i]);
        HeroAction[1] = HitType[i];                // Заносим тип удара в HeroAction
}
 
// ********************* Выводим тип поведения в бою (CombatStyle) ************************
// Слушатели событий
furyattack_btn.addEventListener(MouseEvent.CLICK, furyattack);
silentdefence_btn.addEventListener(MouseEvent.CLICK, silentdefence);
distance_btn.addEventListener(MouseEvent.CLICK, distance);
 
var tempState1:DisplayObject = furyattack_btn.upState;
var tempState2:DisplayObject = silentdefence_btn.upState;
var tempState3:DisplayObject = distance_btn.upState;
 
function furyattack(event:MouseEvent):void
{
        furyattack_btn.upState = furyattack_btn.downState;
        silentdefence_btn.upState = tempState2;
        distance_btn.upState = tempState3;
        attacktype_fld.text = CombatStyle[0];
        HeroAction[0] = CombatStyle[0];
        }
 
function silentdefence(event:MouseEvent):void
{
        silentdefence_btn.upState = silentdefence_btn.downState;
        furyattack_btn.upState = tempState1;
        distance_btn.upState = tempState3;
        attacktype_fld.text = CombatStyle[1];
        HeroAction[0] = CombatStyle[1];
        }
 
function distance(event:MouseEvent):void
{
        distance_btn.upState = distance_btn.downState;
        furyattack_btn.upState = tempState1;
        silentdefence_btn.upState = tempState2;
        attacktype_fld.text = CombatStyle[2];
        HeroAction[0] = CombatStyle[2];
        }
 
// **************** Выводим место удара (HitPlace) *********************************
// Фильтр свечения
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.filters.GlowFilter;
 
var dropShadow:GlowFilter = new GlowFilter(0xFF0000,1,100,100,1,15,true,true);
var filtersArray:Array = new Array(dropShadow);
 
// Слушатели событий
head_btn.addEventListener(MouseEvent.CLICK, head);
body_btn.addEventListener(MouseEvent.CLICK, body);
RightArm_btn.addEventListener(MouseEvent.CLICK, rightArm);
LeftArm_btn.addEventListener(MouseEvent.CLICK, leftArm);
legs_btn.addEventListener(MouseEvent.CLICK, legs);
 
// Функции указания удара
var checkOn:Boolean = false; //Выбрано куда бить или нет
 
function head(event:MouseEvent):void
{
        if (checkOn == false)
        {
        head_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[0];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function body(event:MouseEvent):void
{
        if (checkOn == false)
        {
        body_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[1];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function rightArm(event:MouseEvent):void
{
        if (checkOn == false)
        {
        RightArm_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[2];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function leftArm(event:MouseEvent):void
{
        if (checkOn == false)
        {
        LeftArm_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[3];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function legs(event:MouseEvent):void
{
        if (checkOn == false)
        {
        legs_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[4];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
// Функция удаления фильтров
function deleteFilters():void
{
        head_btn.filters = null;
        body_btn.filters = null;
        RightArm_btn.filters = null;
        LeftArm_btn.filters = null;
        legs_btn.filters = null;
        checkOn = false;
        }
 
// ************************* TimeLine ***************************
// Подсчет времени на удар врага
function EnemyTime_fnc():void
{
        EnemyTime = (10-eAgility);
 
        EnemyAction[0] = rnd(2);
        EnemyAction[1] = rnd(5);
        EnemyAction[2] = rnd(4);
        switch (EnemyAction[0])
        {
        case 0: EnemyTime = EnemyTime + 0; EnemyAction[0] = "Яростная атака"; eDamage = eDamage+(eDamage/4); break;
        case 1: EnemyTime = EnemyTime + 3; EnemyAction[0] = "Глухая оборона"; eDamage = eDamage-(eDamage/4); break;
        case 2: EnemyTime = EnemyTime + 2; EnemyAction[0] = "Держать дистанцию"; break;
        }
 
        switch (EnemyAction[1])
        {
        case 0: EnemyTime = EnemyTime + 5; EnemyAction[1] = "Рубящий удар"; break;
        case 1: EnemyTime = EnemyTime + 3; EnemyAction[1] = "Колющий удар"; break;
        case 2: EnemyTime = EnemyTime + 2; EnemyAction[1] = "Пинок"; break;
        case 3: EnemyTime = EnemyTime + 3; EnemyAction[1] = "Удар щитом"; break;
        case 4: EnemyTime = EnemyTime + 5; EnemyAction[1] = "Толчек"; break;
        case 5: EnemyTime = EnemyTime + 10; EnemyAction[1] = "Обманный удар"; break;
        }
 
        switch (EnemyAction[2])
        {
        case 0: EnemyAction[2] = "в голову"; break;
        case 1: EnemyAction[2] = "в корпус"; break;
        case 2: EnemyAction[2] = "в левую руку"; break;
        case 3: EnemyAction[2] = "в правую руку"; break;
        case 4: EnemyAction[2] = "по ногам"; break;
        }
if (EnemyTime <= 0) {EnemyTime = 1;}
EnemyAction[3] = eDamage;
 
}
 
// Подсчет времени на удар героя
function HeroTime_fnc():void
{
        HeroTime = (10-agility);
 
        switch (HeroAction[0])
        {
        case "Яростная атака": HeroTime = HeroTime + 0; damage = damage+(damage/4); break;
        case "Глухая оборона": HeroTime = HeroTime + 3; damage = damage-(damage/4); break;
        case "Держать дистанцию": HeroTime = HeroTime + 2; break;
        }
 
        switch(HeroAction[1])
        {
        case "Рубящий удар": HeroTime = HeroTime + 5; break;
        case "Колющий удар": HeroTime = HeroTime + 3; break;
        case "Пинок": HeroTime = HeroTime + 2; break;
        case "Удар щитом": HeroTime = HeroTime + 3; break;
        case "Толчек": HeroTime = HeroTime + 5; break;
        case "Обманный удар": HeroTime = HeroTime + 10; break;
        }
HeroAction[3] = damage;
if (HeroTime <= 0) {HeroTime = 1;}
}
 
// ******************************** Присваевает TimeLine значение действия ******************
var ti:Number = 0;
var triggerTi:Boolean = true;
 
function Action():void
{
        if (triggerTi == true)
                {
                HeroTime_fnc(); EnemyTime_fnc();
                TimeLine[HeroTime] = HeroAction;
                TimeLine[EnemyTime] = EnemyAction;
                }
 
        do { ti=ti+1; }
        while (TimeLine[ti] == undefined); // Проверяем цикл по массиву TimeLine, до первого действия
 
if (triggerTi == false){
        if (TimeLine[ti] == HeroAction) {HeroTime_fnc(); TimeLine[HeroTime+ti] = HeroAction; }
        else { EnemyTime_fnc(); TimeLine[EnemyTime+ti] = EnemyAction; }
}
 
triggerTi = false
 
        trace("ti="+ti);
        trace("HeroTime="+HeroTime);
        trace("EnemyTime="+EnemyTime);
        trace("TimeLine="+TimeLine);
}
 
// ************************************ Обработка действия (WorkAction)***************************
function WorkAction():void
{
        if (TimeLine[ti] == EnemyAction) {hits = hits-EnemyAction[3]; hits_fld.text = String(hits);
        eDamage = eStrange; }
        else {eHits = eHits-HeroAction[3]; eHits_fld.text = String(eHits); damage = strange; }
}
 
// ******************* Следующий ход *******************************
var turn:Number = 0;
turn_fld.text = String(turn);
 
nextturn_btn.addEventListener(MouseEvent.CLICK, nextturn);
 
function nextturn(e:MouseEvent):void
{
Action();                        // Записываем удары в TimeLine и находим ближайший удар
turn_fld.text = String(ti);                // Счетчик ходов
NextMovement_fld.text = String(TimeLine[ti]);
WorkAction();                // Обрабатываем действие
}
 
// ********************************* Функция случайного числа ********************************
function rnd(Max):int
{
var randomize:Number = (Math.floor(Math.random() * (Max+1))-Math.floor(Math.random() * (Max+1)));
if (randomize < 0)
        {
                randomize = 0;
                }
        return randomize;
        }

Знаю, что огромный кусок кода, но я уже голову сломал - не могу понять причину, почему в TimeLine на втором ходу записывается 2 раза EnemyAction, на 3-ем - 3 раза и т.д.
Может подскажете где ошибка? Помимо моего ДНК :) Я только начал разбираться в АС3.

файл для Adobe Flash CS5, в котором дело и происходит, прилагается.

terbooter 12.12.2010 15:00

Поставил брикпоинт на строчку
Код AS3:

EnemyAction[0] = rnd(2);

Один ход = одна операция присвоения.
В чем ошибка то?

cfanya 12.12.2010 15:06

Насколько я понимаю, ошибка где-то в районе функции Action(); которая вызывается из функции nextturn(); что в конце кода...
Проблема в том, что в массив TimeLine несколько раз подряд записывается массив EnemyAction.

Если на втором ходу вывести trace (TimeLine); то пишет так:
TimeLine=,,,Яростная атака,Рубящий удар,в корпус,12,,Яростная атака,Удар щитом,в голову,18,,,Яростная атака,Удар щитом,в голову,18

А если на третьем:
TimeLine=,,,Яростная атака,Рубящий удар,в корпус,12,,Держать дистанцию,Удар щитом,в голову,12,,,Держать дистанцию,Удар щитом,в голову,12,,,,,Держать дистанцию,Удар щитом,в голову,12

Четвертый:
TimeLine=,,,Яростная атака,Рубящий удар,в корпус,12,,Яростная атака,Рубящий удар,в голову,15,,,Яростная атака,Рубящий удар,в голову,15,,,,,Яростная атака,Рубящий удар,в голову,15,,,,,Яростная атака,Рубящий удар,в голову,15

И так далее...

Aber 12.12.2010 16:15

Может быть дело в переменной ti? Я что-то не разобрался в этом месте
Код AS3:

do { ti=ti+1; }
        while (TimeLine[ti] == undefined); // Проверяем цикл по массиву TimeLine, до первого действия

Но думаю что ты хотел произвести проверку от 0, тогда надо обнулить ti или занести объявление переменной в функцию.
Это просто предположение, я сам вторую неделю изучаю as.
У меня стоит CS4, проверить не могу.

cfanya 12.12.2010 16:33

Не совсем так... Проверка TimeLine идет до того момента, когда в этом массиве встречается ближайшая запись. По умолчанию, пустая ячейка массива содержит значение "undefined". Т.е. цикл выполняется до тех пор, пока не встретит значение отличное от "undefined", т.е. любую запись.

Aber 12.12.2010 16:59

Всё равно не понял зачем ты это делаешь, есть же функции которые выводят длину массива, функции записи в начало или конец.

cfanya 12.12.2010 17:12

Массив неопределенной длинны TimeLine - время.
Массивы HeroAction и EnemyAction - содержат действия героя и врага соответственно.
Они заносятся в массив TimeLine в месте на которое указывает переменная ti.
HeroTime и EnemyTime - переменные, которые обозначают временные затраты на удар.
Проверка делается для того, что бы узнать кто бьет первым и когда.

Например:
Действие героя занимает 5 единиц времени (HeroTime = 5)
А врага - 8 единиц времени (EnemyTime = 8)

В в пятую ячейку TimeLine заносится HeroAction, а в 8-ю EnemyAction.

Цикл do/while проверяет массив TimeLine до первого найденного действия.

cfanya 12.12.2010 17:50

Переписал код таким образом:

Код AS3:

stop();
 
var randomize:Number = 1;
var Max:int = 1;
 
// Характеристики персонажа
var strange:int = 10;
var agility:int = 12;
var endurance:int = 8;
var hits:int = 100;
var weapon:int = 5;
var armour:int = 3;
var HeroTime:int = (10-agility);
var damage:int = strange;
strange_fld.text = String(strange);
agility_fld.text = String(agility);
endurance_fld.text = String(endurance);
hits_fld.text = String(hits);
 
// Характеристики врага
var eStrange:int = 12;
var eAgility:int = 10;
var eEndurance:int = 15;
var eHits:int = 100;
var eWeapon:int = 3;
var eArmour:int = 1;
var EnemyTime:int = 8;
var eDamage:int = eStrange;
eStrange_fld.text = String(eStrange);
eAgility_fld.text = String(eAgility);
eEndurance_fld.text = String(eEndurance);
eHits_fld.text = String(eHits);
 
// ********************** Массивы ******************************
var TimeLine:Array = new Array();        // Общая шкала времени
var HeroAction:Array = new Array();        // Массив, содержащий сведения о следующем действии героя
var EnemyAction:Array = new Array(); // Массив, содержащий сведения о следующем действии врага
 
HeroAction[0] = "Яростная атака";
HeroAction[1] = "Рубящий удар";
HeroAction[2] = "в корпус";
 
// Тип удара        HeroAction[0]
var CombatStyle:Array = new Array("Яростная атака", "Глухая оборона", "Держать дистанцию");
 
// Тип удара  HeroAction[1]
var HitType:Array = new Array("Рубящий удар", "Колющий удар", "Пинок", "Удар щитом", "Толчек", "Обманный удар");
 
// Место удара        HeroAction[2]
var HitPlace:Array = new Array("в голову", "в корпус", "в правую руку", "в левую руку", "по ногам");
 
// ******************* Выводим тип атаки (HitType) ******************************
// Слушатели событий
nextattack_btn.addEventListener(MouseEvent.CLICK, nextattack);
previousattack_btn.addEventListener(MouseEvent.CLICK, previousattack);
 
hittype_fld.text = String(HitType[0]);
var i:Number = 0;
 
function nextattack(event:MouseEvent):void
{
        if (i < 5) {i=i+1;}
        hittype_fld.text = String(HitType[i]);
        HeroAction[1] = HitType[i];                // Заносим тип удара в HeroAction
        }
 
function previousattack(event:MouseEvent):void
{
        if (i > 0) {i=i-1;}
        hittype_fld.text = String(HitType[i]);
        HeroAction[1] = HitType[i];                // Заносим тип удара в HeroAction
}
 
// ********************* Выводим тип поведения в бою (CombatStyle) ************************
// Слушатели событий
furyattack_btn.addEventListener(MouseEvent.CLICK, furyattack);
silentdefence_btn.addEventListener(MouseEvent.CLICK, silentdefence);
distance_btn.addEventListener(MouseEvent.CLICK, distance);
 
var tempState1:DisplayObject = furyattack_btn.upState;
var tempState2:DisplayObject = silentdefence_btn.upState;
var tempState3:DisplayObject = distance_btn.upState;
 
function furyattack(event:MouseEvent):void
{
        furyattack_btn.upState = furyattack_btn.downState;
        silentdefence_btn.upState = tempState2;
        distance_btn.upState = tempState3;
        attacktype_fld.text = CombatStyle[0];
        HeroAction[0] = CombatStyle[0];
        }
 
function silentdefence(event:MouseEvent):void
{
        silentdefence_btn.upState = silentdefence_btn.downState;
        furyattack_btn.upState = tempState1;
        distance_btn.upState = tempState3;
        attacktype_fld.text = CombatStyle[1];
        HeroAction[0] = CombatStyle[1];
        }
 
function distance(event:MouseEvent):void
{
        distance_btn.upState = distance_btn.downState;
        furyattack_btn.upState = tempState1;
        silentdefence_btn.upState = tempState2;
        attacktype_fld.text = CombatStyle[2];
        HeroAction[0] = CombatStyle[2];
        }
 
// **************** Выводим место удара (HitPlace) *********************************
// Фильтр свечения
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.filters.GlowFilter;
 
var dropShadow:GlowFilter = new GlowFilter(0xFF0000,1,100,100,1,15,true,true);
var filtersArray:Array = new Array(dropShadow);
 
// Слушатели событий
head_btn.addEventListener(MouseEvent.CLICK, head);
body_btn.addEventListener(MouseEvent.CLICK, body);
RightArm_btn.addEventListener(MouseEvent.CLICK, rightArm);
LeftArm_btn.addEventListener(MouseEvent.CLICK, leftArm);
legs_btn.addEventListener(MouseEvent.CLICK, legs);
 
// Функции указания удара
var checkOn:Boolean = false; //Выбрано куда бить или нет
 
function head(event:MouseEvent):void
{
        if (checkOn == false)
        {
        head_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[0];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function body(event:MouseEvent):void
{
        if (checkOn == false)
        {
        body_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[1];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function rightArm(event:MouseEvent):void
{
        if (checkOn == false)
        {
        RightArm_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[2];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function leftArm(event:MouseEvent):void
{
        if (checkOn == false)
        {
        LeftArm_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[3];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
function legs(event:MouseEvent):void
{
        if (checkOn == false)
        {
        legs_btn.filters = filtersArray; checkOn = true;
        HeroAction[2] = HitPlace[4];
        }
        else {        deleteFilters(); delete HeroAction[2]; }
}
 
// Функция удаления фильтров
function deleteFilters():void
{
        head_btn.filters = null;
        body_btn.filters = null;
        RightArm_btn.filters = null;
        LeftArm_btn.filters = null;
        legs_btn.filters = null;
        checkOn = false;
        }
 
// ************************* TimeLine ***************************
// Подсчет времени на удар врага
function EnemyTime_fnc():void
{
        EnemyTime = (10-eAgility);
 
        EnemyAction[0] = rnd(2);
        EnemyAction[1] = rnd(5);
        EnemyAction[2] = rnd(4);
        switch (EnemyAction[0])
        {
        case 0: EnemyTime = EnemyTime + 0; EnemyAction[0] = "Яростная атака"; eDamage = eDamage+(eDamage/4); break;
        case 1: EnemyTime = EnemyTime + 3; EnemyAction[0] = "Глухая оборона"; eDamage = eDamage-(eDamage/4); break;
        case 2: EnemyTime = EnemyTime + 2; EnemyAction[0] = "Держать дистанцию"; break;
        }
 
        switch (EnemyAction[1])
        {
        case 0: EnemyTime = EnemyTime + 5; EnemyAction[1] = "Рубящий удар"; break;
        case 1: EnemyTime = EnemyTime + 3; EnemyAction[1] = "Колющий удар"; break;
        case 2: EnemyTime = EnemyTime + 2; EnemyAction[1] = "Пинок"; break;
        case 3: EnemyTime = EnemyTime + 3; EnemyAction[1] = "Удар щитом"; break;
        case 4: EnemyTime = EnemyTime + 5; EnemyAction[1] = "Толчек"; break;
        case 5: EnemyTime = EnemyTime + 10; EnemyAction[1] = "Обманный удар"; break;
        }
 
        switch (EnemyAction[2])
        {
        case 0: EnemyAction[2] = "в голову"; break;
        case 1: EnemyAction[2] = "в корпус"; break;
        case 2: EnemyAction[2] = "в левую руку"; break;
        case 3: EnemyAction[2] = "в правую руку"; break;
        case 4: EnemyAction[2] = "по ногам"; break;
        }
if (EnemyTime <= 0) {EnemyTime = 1;}
if (HeroTime == EnemyTime){EnemyTime_fnc();}
EnemyAction[3] = eDamage;
}
 
// Подсчет времени на удар героя
function HeroTime_fnc():void
{
        HeroTime = (10-agility);
 
        switch (HeroAction[0])
        {
        case "Яростная атака": HeroTime = HeroTime + 0; damage = damage+(damage/4); break;
        case "Глухая оборона": HeroTime = HeroTime + 3; damage = damage-(damage/4); break;
        case "Держать дистанцию": HeroTime = HeroTime + 2; break;
        }
 
        switch(HeroAction[1])
        {
        case "Рубящий удар": HeroTime = HeroTime + 5; break;
        case "Колющий удар": HeroTime = HeroTime + 3; break;
        case "Пинок": HeroTime = HeroTime + 2; break;
        case "Удар щитом": HeroTime = HeroTime + 3; break;
        case "Толчек": HeroTime = HeroTime + 5; break;
        case "Обманный удар": HeroTime = HeroTime + 10; break;
        }
HeroAction[3] = damage;
if (HeroTime <= 0) {HeroTime = 1;}
}
 
// ******************************** Присваевает TimeLine значение действия ******************
var ti:Number = 0;
var triggerTi:Boolean = true;
 
function Action():void
{
        if (triggerTi == true)
                {
                HeroTime_fnc(); EnemyTime_fnc();
                TimeLine[HeroTime] = HeroAction;
                TimeLine[EnemyTime] = EnemyAction;
 
        do { ti=ti+1; }
        while (TimeLine[ti] == undefined); // Проверяем цикл по массиву TimeLine, до первого действия
                }
 
if (triggerTi == false){
        if (TimeLine[ti] == HeroAction) {delete TimeLine[ti]; HeroTime_fnc(); TimeLine[HeroTime+ti] = HeroAction; }
        else { delete TimeLine[ti]; EnemyTime_fnc(); TimeLine[EnemyTime+ti] = EnemyAction; }
        do { ti=ti+1; }
        while (TimeLine[ti] == undefined); // Проверяем цикл по массиву TimeLine, до первого действия
}
 
triggerTi = false;
 
        trace("EnemyAction="+EnemyAction);
        trace("EnemyTime="+EnemyTime);
        trace("HeroTime="+HeroTime);
        trace("ti="+ti);
        trace("HeroTime+ti="+(HeroTime+ti));
        trace("EnemyTime+ti="+(EnemyTime+ti));
        trace("TimeLine="+TimeLine);
}
 
// ************************************ Обработка действия (WorkAction)***************************
function WorkAction():void
{
        if (TimeLine[ti] == EnemyAction) {hits = hits-EnemyAction[3]; hits_fld.text = String(hits);
        eDamage = eStrange; }
        else {eHits = eHits-HeroAction[3]; eHits_fld.text = String(eHits); damage = strange; }
}
 
// ******************* Следующий ход *******************************
var turn:Number = 0;
turn_fld.text = String(turn);
 
nextturn_btn.addEventListener(MouseEvent.CLICK, nextturn);
 
function nextturn(e:MouseEvent):void
{
Action();                        // Записываем удары в TimeLine и находим ближайший удар
turn_fld.text = String(ti);                // Счетчик ходов
NextMovement_fld.text = String(TimeLine[ti]);
WorkAction();                // Обрабатываем действие
}
 
// ********************************* Функция случайного числа ********************************
function rnd(Max):int
{
var randomize:Number = (Math.floor(Math.random() * (Max+1))-Math.floor(Math.random() * (Max+1)));
if (randomize < 0)
        {
                randomize = 0;
                }
        return randomize;
        }


cfanya 12.12.2010 17:51

Но проблема все еще осталась - в функции Action(); просто в какой-то момент перестает срабатывать часть этого кода:

Код AS3:

if (triggerTi == false){
        if (TimeLine[ti] == HeroAction) {delete TimeLine[ti]; HeroTime_fnc(); TimeLine[HeroTime+ti] = HeroAction; }
        else { delete TimeLine[ti]; EnemyTime_fnc(); TimeLine[EnemyTime+ti] = EnemyAction; }
        do { ti=ti+1; }
        while (TimeLine[ti] == undefined); // Проверяем цикл по массиву TimeLine, до первого действия
}

Иногда не работает вот эта часть:
Код AS3:

if (TimeLine[ti] == HeroAction) {delete TimeLine[ti]; HeroTime_fnc(); TimeLine[HeroTime+ti] = HeroAction; }

А иногда вот эта:
Код AS3:

else { delete TimeLine[ti]; EnemyTime_fnc(); TimeLine[EnemyTime+ti] = EnemyAction; }

Но ведь должно же работать! Должно!

Добавлено через 43 минуты
Интересно, что если вместо:
Код AS3:

if (TimeLine[ti] == HeroAction) {delete TimeLine[ti]; HeroTime_fnc(); TimeLine[HeroTime+ti] = HeroAction; }
        else { delete TimeLine[ti]; EnemyTime_fnc(); TimeLine[EnemyTime+ti] = EnemyAction; }

Написать:
Код AS3:

if (TimeLine[ti][1] == HeroAction[1]) {delete TimeLine[ti]; HeroTime_fnc(); TimeLine[HeroTime+ti] = HeroAction; }
if (TimeLine[ti][1] == EnemyAction[1]) { delete TimeLine[ti]; EnemyTime_fnc(); TimeLine[EnemyTime+ti] = EnemyAction; }

То выдает слудующее:
Цитата:

TypeError: Error #1010: Термин не определен и не имеет свойств.
at HeroFightNew_fla::MainTimeline/Action()
at HeroFightNew_fla::MainTimeline/nextturn()
К чему бы это?

Добавлено через 6 часов 41 минуту
Все, оно работает. Ошибку нашел. Спасибо за внимание.


Часовой пояс GMT +4, время: 18:47.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.