Форум программистов, компьютерный форум, киберфорум
ActionScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 45
1
AS 3.0

Общее управление анимацией для нескольких объектов

11.05.2014, 23:50. Показов 1358. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Делаю лабу, надо что-бы 3 объекта двигались по одной траектории (через код). Движение сделал. Но вот в чём фишка, не прописывать же через функцию движения для всех объектов? Я думаю можно создать пустую переменную, присвоить к объектам эту переменную, и уже для неё написать функцию. Вот только как это сделать я не представляю. Подскажите пожалуйста. Если что-то не понятно, спросите, я просто не мастер объяснять.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.05.2014, 23:50
Ответы с готовыми решениями:

Управление 2D анимацией
Здравствуйте, помогите пожалуйста разобраться. Задача стоит в том, чтобы синхронизировать кадры...

Управление анимацией
Возникла необходимость отключать анимацию при загрузке окна. Имя Storyboard - Name. Чтобы анимация...

Управление анимацией
Необходимо программно реализовать запуск различных анимаций из ресурсов. Вот примерный код: ...

Общее хранилище для нескольких потоков сервера
Пишу программу, в ней появилась надобность обработки http запросов, значит нужен сервер. Сначала...

11
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
11.05.2014, 23:56 2
Цитата Сообщение от Awesder Посмотреть сообщение
Если что-то не понятно, спросите, я просто не мастер объяснять.
Пока ничего не понятно. Каким образом реализовано движение? И что значит это?
Цитата Сообщение от Awesder Посмотреть сообщение
присвоить к объектам эту переменную
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 45
12.05.2014, 00:09  [ТС] 3
Всё просто. Есть три объекта, они должны появляться рандомно, двигаться вниз. Это я реализовал.
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
rowan1.x = 200 + Math.random()* 400 ; 
stage.addEventListener(Event.ENTER_FRAME, f1);
function f1 (e:Event): void {
if (rowan1.y<400) {
rowan1.y+=5;
}
else{
rowan1.x = 200 + Math.random()* 400 ; 
rowan1.y = 1;
}
}
Но согласитесь, прописывать эту функцию каждый раз для нового объекта не актуально. Не проще создать создать переменную, ссылаясь на который объекты будут выполнять движение? Я сейчас приведу что-то вроде примера, но это пример, как правильно это писать я не знаю.
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var rowan1:rowan=new rowan;
var spruce1:spruce=new spruce;
var oak1:oak=new oak;
var PEREMENNAY:TIP=new TIP:
addChild (rowan1);
addChild (spruce1);
addChild (oak1);
addChild (PEREMENNAY);
rowan1=PEREMENNAY;
spruce1=PEREMENNAY;
oak1=PEREMENNAY;
PEREMENNAY.x = 200 + Math.random()* 400 ; 
stage.addEventListener(Event.ENTER_FRAME, f1);
function f1 (e:Event): void {
if (PEREMENNAY.y<400) {
PEREMENNAY.y+=5;
}
else{
PEREMENNAY.x = 200 + Math.random()* 400 ; 
PEREMENNAY.y = 1;
}
}
Представьте аналогию с классами из html, где можно присвоить нескольким объектам один класс, и один будут одинаковыми. (Примерно)
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
12.05.2014, 10:55 4
Во-первых пишите в классах (1й урок)
А во-вторых, присвойте некое значение создаваемому объекту, показатель скорости к примеру. По аналогии можно и направление организовать и много другое.
В-третьих, у вас очень плохой стиль написания кода. С капслоком обычно называют константы, при создании объектов пишут скобки и т.д.
А по теме. Прослушивание ENTER_FRAME выносим в корень и оттуда меняем координаты всех объектов, принимающих участие в движении.
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 45
12.05.2014, 19:30  [ТС] 5
По поводу первого, спасибо, на будущее учту, вообще не знал что можно писать в классах. Но сейчас надо разобраться именно в таким типом кода, который написан в кадре.
По поводу второго, не понял зачем ему что-то присваивать, ведь в функции всё написано, зачем лишние значения?
По поводу третьего про капс лок я в курсе, переменную "PEREMENNAY" я написал только здесь, и только в виде примера. Капс лок же я сделал для выделения. В самом коде у меня всё нормально.
А по теме, я не совсем понял, как это вынести ENTER_FRAME в корень? Покажите пожалуйста на моем коде, или ссылку на пример если не трудно. Напоследок уточню, мы говорим об одном и том же? Присвоении функции к нескольким объектам, причем функция должна быть одна, а объекты разные.
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
12.05.2014, 19:41 6
К примеру есть класс (пусть даже в ИДЕ, в библиотеке) Item
У экземпляров класса есть свойство speed. Это можно организовать и без свойства и увеличивать координату для всех объектов на фиксированное значение (например, константа)
Тогда имеем примерно такое:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function init():void{
   var item:Item;
   var _items:Vector.<Item> = new Vector.<Item>();
   for(var i:int = 0; i < 20; i++){
      item = new Item();
      item.speed = 2 + Math.random() * 8;
      addChild(item);
      item.x = stage.stageWidth*Math.random();
      item.y = 0;
      _items.push(item);
   }
addEventListener(Event.ENTER_FRAME, onUpdate);
}
 
function onUpdate(e:Event):void{
   var item:Item;
   for(var i:int = 0; i < 20; i++){
      item = _items[i];
      item.y += item.speed;
   }
}
1
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 45
12.05.2014, 20:19  [ТС] 7
По моему мы друг друга не понимаем, или я вас не понимаю. Вот код:
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import flash.events.Event;
stop();
var rowan1:rowan=new rowan; //создание рябины
var spruce1:spruce=new spruce; //создание елки
var oak1:oak=new oak;
addChild (rowan1); 
addChild (spruce1);
addChild (oak1);
rowan1.x = 200 + Math.random()* 400 ; //начальное место положение рябины
spruce1.x = 200 + Math.random()* 400 ; //местоположение елки
oak1.x = 200 + Math.random()* 400 ; 
stage.addEventListener(Event.ENTER_FRAME, f1);  //функция движения рябины
function f1 (e:Event): void {
if (rowan1.y<400) {
rowan1.y+=5;
}
else{
rowan1.x = 200 + Math.random()* 400 ; 
rowan1.y = 1;
}
}
stage.addEventListener(Event.ENTER_FRAME, f2);  //функция движения елки
function f2 (e:Event): void {
if (spruce1.y<400) {
spruce1.y+=5;
}
else{
spruce1.x = 200 + Math.random()* 400 ; 
spruce1.y = 1;
}
}
stage.addEventListener(Event.ENTER_FRAME, f3);
function f3 (e:Event): void {
if (oak1.y<400) {
oak1.y+=5;
}
else{
oak1.x = 200 + Math.random()* 400 ; 
oak1.y = 1;
}
}
А как сделать одну функцию для всех объектов? Вместо трех как сейчас? Я изучаю флешь всего две недели, поэтому пожалуйста, разъясняйте свои действия.
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
12.05.2014, 20:51 8
Лучший ответ Сообщение было отмечено Awesder как решение

Решение

Цитата Сообщение от Awesder Посмотреть сообщение
мы друг друга не понимаем
Похоже я вас не понял.
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import flash.events.Event;
import flash.display.DisplayObject;
 
stop();
var rowan1:rowan = new rowan();//создание рябины
var spruce1:spruce = new spruce();//создание елки
var oak1:oak = new oak();
addChild(rowan1);
addChild(spruce1);
addChild(oak1);
rowan1.x = 200 + Math.random() * 400;//начальное место положение рябины
spruce1.x = 200 + Math.random() * 400;//местоположение елки
oak1.x = 200 + Math.random() * 400;
 
var arr:Array = [oak1, spruce1, rowan1];
 
stage.addEventListener(Event.ENTER_FRAME, f1);
//функция движения рябины;
function f1(e:Event):void
{
    var item:DisplayObject;
    var length:int=arr.length;
    for(var i:int = 0; i<length; i++){
        item = arr[i] as DisplayObject;
        if (item.y < 400)
        {
            item.y +=  5;
        }
        else
        {
            item.x = 200 + Math.random() * 400;
            item.y = 1;
        }
    }
}
Вот такой подход предполагался?
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 45
12.05.2014, 21:21  [ТС] 9
Да, спасибо, именно этого я и добивался. Но не могли бы вы разъяснить код?
ActionScript 3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var arr:Array = [oak1, spruce1, rowan1]; \\это массив
stage.addEventListener(Event.ENTER_FRAME, f1);
function f1(e:Event):void
{
    var item:DisplayObject; \\ что вы делаете здесь?
    var length:int=arr.length; \\здесь
    for(var i:int = 0; i<length; i++){ \\и здесь
        item = arr[i] as DisplayObject; \\и вот здесь
        if (item.y < 400)
        {
            item.y +=  5;
        }
        else
        {
            item.x = 200 + Math.random() * 400;
            item.y = 1;
        }
    }
}
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
12.05.2014, 21:26 10
По строкам
1 - создаю массив, куда помещаю соответствующие объекты.
5 - объявляю переменную, можно это было сделать и в 8й строке, но так на каждый объект массива будет создаваться одна ссылка, в моем случае ссылка на объект создается только один раз.
6 - определяю длину массива (теоретически его размер может измениться), в отдельной переменной что бы с каждым циклом не делать лишних вычислений по определению его размера.
7 - цикл
8 - получаю ссылку на объект из массива. Отдельно что бы при каждом обращению к массиву не вычислять нужный объект, да и читабельней при таком подходе.
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 45
12.05.2014, 21:37  [ТС] 11
Ещё несколько вопросов, я пробовал вставить рандомное появление в эту функцию, но не нашел куда её ткнуть, не по скажите куда это можно сделать?
0
Модератор
2904 / 1763 / 179
Регистрация: 19.02.2011
Сообщений: 6,477
12.05.2014, 22:20 12
Awesder, так у вас же по оси х появление рандомное. Или в чем вопрос?
0
12.05.2014, 22:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2014, 22:20
Помогаю со студенческими работами здесь

Общее меню для нескольких форм C++ Builder
Хочу получить одно меню компонента MainMenu на 8 формах. Явно, что копировать обработчики и делать...

Управление анимацией .jpl
При выполнении лабораторной работы на Visual Basic 6.0 столкнулась с такой проблемой : мне нужно...

Управление анимацией с клавиатуры.
Ребята помогите зделать анимацию управление с помощю клавиатуры на каком-то фоне( самолетек,...

управление анимацией в приложений
Вот создал я анимацию на блендере. как сделать так, что бы она включалась только после нажатия....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru