НОВЫЕ ИГРЫЛУЧШИЕ ИГРЫФОРУМ 616 Всего сообщений: 305037
+  Форум FlashPlayer.ru
|-+  Форум по flash играм
| |-+  Академия flash программирования (Модераторы: Lexei, Vetal1992)
| | |-+  Функции...

Автор Тема: Функции...  (Прочитано 7924 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Anatoliy))) Мужской

Функции...
« : 12 Октября 2011, 10:24:59 »
Можно ли одновременно использовать одну и ту же функцию? А то я в своей программе написал функцию движения объектов и мне надо сделать так, что бы после запуска программы все объекты начинали двигаться. Я пробовал вызывать подряд мою функцию с разными параметрами, но почему-то работала только последняя строчка:
<Описание работы функции>
<Её вызов:
startF(ob2,345,665,2);
startF(ob1,345,665,2);
startF(ob3,345,665,2);>

,где ob1 или ob2 или ob3 - название объекта, который надо двигать. Работает только строчка startF(ob3,345,665,2), то есть последняя и у меня на сцене вместо рёх объектов движется только один... Помогите!))) Могу скинуть свою прогу, может там понятнее будет)))))) :unsure: O_o :cry: :help:

Оффлайн Vetal1992 Мужской

Re: Функции...
« Ответ #1 : 12 Октября 2011, 16:51:23 »
Да скидывай ты уже программу)) Только не создавай еще больше тем)
от этого задача понятнее не становится)

Если ты имеешь в виду создавать код функции во время выполнения самой программы - для этого понадобится строчек 1000.

Функции подряд вызывать можно. Всё правильно ты делаешь. Ты, наверное, затупил со ссылками и назвал объекты не так, как надо

Оффлайн Anatoliy))) Мужской

Re: Функции...
« Ответ #2 : 12 Октября 2011, 21:12:01 »
Вот код))) Часть кода написал Алекс Карсс, за что ему огромное спасибо)))

function rastF(p1:Object,p2:Object):Number {
   return int(Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)));
}
//------------------------------------------------------------------------------
function minrF(rus:Object):Object {
   var obj:Object;
   if(Math.min(rastF(rus,n0),rastF(rus,n1)) == rastF(rus,n0)) {
   obj=n0;
   }
   if(Math.min(rastF(rus,n0),rastF(rus,n1)) == rastF(rus,n1)) {
   obj=n1;
   }
   return obj;
}
function minnF(nap:Object):Object {
   var obj:Object;
   if(Math.min(rastF(nap,r0),rastF(nap,r1),rastF(nap,r2)) == rastF(nap,r0)) {
   obj=r0;
   }
   if(Math.min(rastF(nap,r0),rastF(nap,r1),rastF(nap,r2)) == rastF(nap,r1)) {
   obj=r1;
   }
   if(Math.min(rastF(nap,r0),rastF(nap,r1),rastF(nap,r2)) == rastF(nap,r2)) {
   obj=r2;
   }
   return obj;
}
//-------------------------------------------------------------------------------
var fun = new Object; //Для удобства поместим всё в объект
fun.obj_1; //Ссылка на первый объект
fun.obj_2; //Ссылка на второй объект
fun.spd; //Для скоростей

fun.vid;
fun.attack1;
fun.health2;
fun.rus;
fun.progresskill = false;
fun.progressmove = false;

fun.attackF = function(e:TimerEvent):void {
fun.health2 -= fun.attack1;
if (fun.health2 <= 0) {
fun.timer1.stop();
fun.timer.stop();
fun.progresskill = true;
fun.obj_2.x = stage.width * 2;

//fun.progresskill = false;
/*
if (fun.rus == true) {
fun.obj_2 = minrF(fun.obj_1);
fun.timer.start();
}
if (fun.rus == false) {
fun.obj_2 = minnF(fun.obj_1);
fun.timer.start();
}
//*/
}
}

fun.timer = new Timer(10);
fun.timer1 = new Timer(10);

fun.timer1.addEventListener(TimerEvent.TIMER, fun.attackF);

fun.goF = function(e:TimerEvent):void {
   if (fun.vid < rastF(fun.obj_1,fun.obj_2)) {
   if(fun.obj_1.x > fun.obj_2.x && fun.vid < rastF(fun.obj_1,fun.obj_2)){
      fun.obj_1.x-=fun.spd;
    }
    if(fun.obj_1.y > fun.obj_2.y && fun.vid < rastF(fun.obj_1,fun.obj_2)){
      fun.obj_1.y-=fun.spd;
   }
    if(fun.obj_1.x < fun.obj_2.x && fun.vid < rastF(fun.obj_1,fun.obj_2)){
      fun.obj_1.x+=fun.spd;
    }
   if(fun.obj_1.y < fun.obj_2.y && fun.vid < rastF(fun.obj_1,fun.obj_2)){
      fun.obj_1.y+=fun.spd;
    }
   }
   if (fun.vid >= rastF(fun.obj_1,fun.obj_2)) {
   fun.timer1.start();
   fun.progressmove = true;
   }
}

//Используем функцию для сохранения нужных объектов и старка обработчика
function startF(obj_1:Object,_spd,_vid,_rus,_attack1,_health2):void {
   fun.obj_1 = obj_1;
   fun.spd = _spd;
   fun.vid = _vid;
   
   fun.attack1 = _attack1;
    fun.health2 = _health2;
   
    if (_rus == 1) {
   fun.obj_2 = minrF(fun.obj_1);
   fun.rus = true;
   }
    if (_rus == 0) {
   fun.obj_2 = minnF(fun.obj_1);
   fun.rus = false;
   }
   fun.timer.addEventListener(TimerEvent.TIMER, fun.goF);
   fun.timer.start();
}
//startF(r1,1);
//--------------------------------------------------------------------------------
//(Объект,скорость,видимость,приналежность,атака1,жизни2)


//if (fun.progresskill == true){
//   startF(r0,1,150,1,1,100);
//   
//   trace("r0",fun.progresskill);
//}
//if (fun.progresskill == false){
//   startF(r1,1,150,1,1,100);
//   trace("r1",fun.progresskill);
//}
//trace(fun.progresskill);
//-------------------------------------------------------------------------------
/*stage.addEventListener(MouseEvent.CLICK, traceF);
function traceF(e:MouseEvent):void {
trace(fun.progresskill);
trace(fun.progressmove);
if (fun.progresskill == true && fun.progressmove == true) {
startF(r1,1,100,1,1,200);
}
}*/
//var timer3:Timer = new Timer(1000);
//timer3.addEventListener(TimerEvent.TIMER, osnF);
//timer3.start();
//function osnF(e:TimerEvent) {
//startF(r0,1,15,1,1,100);
//startF(r1,1,15,1,1,100);
//startF(r2,1,15,1,1,100);
//
//startF(n0,1,15,0,1,100);
//startF(n1,1,15,0,1,100);
//}

startF(r0,1,15,1,1,100);   

Re: Функции...
« Ответ #3 : 12 Октября 2011, 22:20:48 »
Начнем с того, что ты зашел не с того конца. Сначала ставится задача, а потом уже записывается под нее код, но не наоборот. Твоя функция не вызывается несколько раз подряд потому, что каждый раз ты просто переписываешь в ней одно и тоже значение сразу.

fun.obj_1 = obj_1;

А обработчик TimerEvent.TIMER начинает действовать только с последним значением в последней функции, так как начинает работать после прохождения всех действий в следующих кадрах. Если надо сделать так, что бы одновременно обрабатывались несколько объектов, то нужно использовать массивы. Если нужно что бы поочередно, тогда условие перехода к следующему объекту.

Пока же конечная задача остается неясной, а нужно ориентироваться именно на нее. Это и называется проектирование приложения. И нужно ли использовать таймер, ведь можно ограничится и обычным счетчиком.

В общем опиши задачу конечную обычными словами, а так и помочь будет проще уже.
« Последнее редактирование: 12 Октября 2011, 22:23:44 от Elentarion »

Оффлайн Anatoliy))) Мужской

Re: Функции...
« Ответ #4 : 12 Октября 2011, 22:25:56 »
Если в целом, то вот моя задача:

И так... вообще должно быть окошко с кнопками типа:
________________________________________________
|                                                                                  | История
|                                                                                  | Свойства
|                                                                                  | Начать битву
|             изображение поля боя                        | Выбрать битву
|                    (схематично)                                     |Приостановить
|                                                                                  |
|                                                                                  |
|                                                                                  |
|                                                                                  |
|                                                                                  |
|                                                                                  |
|                                                                                  |
| ___________________________________|____________

где левая часть представлена экраном, показывающим поле битвы(сверху, схематично, например: река - синяя полоса, мосты - две линии перпендикулярные реке и имеющие на конце небольшие отрезки, деревья - несколько зелёных линий,войска - геометрические фигуры и так далее), а в правой части находятся кнопки, вызывающие либо всплывающее сообщение, либо другое окошко:
История - история той или иной битвы;
Свойства -  программные свойства объекта(см. ниже);
Начать, приостановить и выбрать битву - надеюсь всё понятно(начало боя, приостановка, выбор боя, где фигурки(деревья, войска) уже расставлены).

Отряды боевых единиц делятся  на пехоту, кавалерию и артиллерию(возможно и добавление ещё каких-то классво или подклассов в процессе разработки)

У них у всех должны быть свойства, с помощью которых можно будет программно управлять течением боя:
-скорость  (пиксели в секунду)
-сила (кол-во возможных убийств за 1 секунду)
-выносливость(с течением времени должна уменьшаться и уменьшать зависимые переменные)
-дальность атаки(максимальное кол-во пикселей, при котором может быть задействовано свойство "Силы")
-кол-во боевых единиц в отряде
-может ли отряд преодолевать определённые препятствия(брод, лес, постройки)
-боевой дух(коэффициент на которой умножаются зависимы переменные)
-меткость в %
-видимость(на каком расстоянии видит вражеский отряд)

Формулы:
Выносливость = выносливость * боевой дух
Скорость = скорость * боевой дух
Меткость = меткость * боевой дух
Сила  = сила * меткость * боевой дух

Виды преград:
1.Естественные
   а)Реки(ширина, наличие брода)
   б)Леса
2.Неестественные:
  а)Мосты
  б)Постройки
 
Для начала нужно написать приложение с меньшими возможностями, попроще, а там уже видно будет... Вы только давайте мне советы, а реализовывать я их сам стараться буду, а то работа ведь на конкурс)))


Добавлено через: 2 мин. 56 сек.
Параметр видимости не нужен, так как программа, даже если будет правильно написана, работать не будет, т.к. объект "невидим".
« Последнее редактирование: 12 Октября 2011, 22:28:52 от Anatoliy))) »

Re: Функции...
« Ответ #5 : 12 Октября 2011, 22:33:07 »
С использованием пользовательских классов знаком? Создание классов и объектов, наследование? Или только программирование в главном сцене программы и стандартные классы?

Оффлайн Anatoliy))) Мужской

Re: Функции...
« Ответ #6 : 12 Октября 2011, 22:37:17 »
Конкретно в as 3.0 - нет. Но общее представление об этом имею и знаю один сайт с уроками... cyber-page. Там есть про создание пользовательских классов, так что по идее могу научится и в as 3.0

Добавлено через: 53 сек.
я имел ввиду создание пользовательских классов)

Добавлено через: 8 мин. 18 сек.
Так что же мне сделать? Создать массив объектов(это возможно?) и работать с ним?  К сожалению ухожу....:(
« Последнее редактирование: 12 Октября 2011, 22:45:35 от Anatoliy))) »

Re: Функции...
« Ответ #7 : 12 Октября 2011, 22:48:22 »
Еще один вопрос. Насколько я понял, ты сейчас хочешь реализовать непосредственно ведение боя. Как оно должно выглядеть? Ну то есть игрок управляет войсками или программно. По каким примерно правилам?

Оффлайн Anatoliy))) Мужской

Re: Функции...
« Ответ #8 : 13 Октября 2011, 11:30:26 »
Короче на конкурс по программированию хочу сделать прогу))) Вот уже как месяц пытаюсь) А так нам дали тему "Война 1812" и я решил создать программу которая автономно иллюстрирует действие боя...) А если сделать, что бы человек управлял(это не надо), то получится целая стратешка))))

Добавлено через: 30 сек.
сейчас опишу правила...секунду

Добавлено через: 7 мин. 11 сек.
Возьмём, как пример, один какой-нибудь объект(может быть отряд кавалерии, например). Программа должна вычислить ближайший вражеский объект, затем двигаться к нему до момента, когда параметр дальности ведения огня(у меня в программе называется vid) будет больше или равен расстоянию от взятого нами объекта до вражеского. Далее наш объект начинает отнимать у вражеского "жизни". Если у противника параметр "жизнь" меньше или равен нулю, то его надо убрать с поля боя. Тут я нашёл два выхода, пока не знаю какой-лучше. Первый, это RemoveChild(вражеский объект). Второй, просто изменить координаты вражеского объекта так, что бы он не был виден, но тут есть проблема: а что если пользователь захочет увеличить размеры окна? тогда враг уже будет виден и это не совсем хорошо)))

Добавлено через: 6 мин. 4 сек.
а ещё забыл добавить.... Все объекты на экране (войска обеих сторон) должны двигаться все вместе.
« Последнее редактирование: 13 Октября 2011, 11:43:41 от Anatoliy))) »

Оффлайн Дарт Вёдер Мужской

Re: Функции...
« Ответ #9 : 13 Октября 2011, 12:25:34 »
Do a barrel roll

+  Форум FlashPlayer.ru
|-+  Форум по flash играм
| |-+  Академия flash программирования (Модераторы: Lexei, Vetal1992)
| | |-+  Функции...