Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.02.2010, 17:13
an_games вне форума Посмотреть профиль Отправить личное сообщение для an_games Найти все сообщения от an_games
  № 1  
Ответить с цитированием
an_games

Регистрация: Mar 2007
Сообщений: 207
По умолчанию расчет движения обьектов через цикл для всех или onEnterFrame для каждого

здравствуйте, не однократно наблюдал следующее:
это касается различных ситуаций, например-аттачу на сцену несколько клипов, которые перемещаются по ней, взаимодействуя при помощи, например, хит теста с клипом-препятствием.

реализую это дело двумя способами-

1. при создании каждого клипа присваиваю ему функцию mc.onEnterFrame(){} c расчетом столкновения.
2.забиваю все клипы в массив и с помощью цикла расчитываю столкновения для всех клипов массива.

так вот, расчетчего-либо для клипа по 1 варианту, визуально, работае быстрее чем 2 при одинаковом алгоритме этого расчета.

вопрос- с чем это связано?
спасибо.

Старый 22.02.2010, 17:34
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 2  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
По-идее должно быть наоборот. Покажите код цикла.
__________________
Hell is the possibility of sanity

Старый 22.02.2010, 18:12
an_games вне форума Посмотреть профиль Отправить личное сообщение для an_games Найти все сообщения от an_games
  № 3  
Ответить с цитированием
an_games

Регистрация: Mar 2007
Сообщений: 207
всех случаев я не припомню, но обычно я делаю по 2 варианту и меня это устраивает, тк особо сложных расчетов я не делал, но сейчас я хочу использовать ниже приведенный код в котором последний раз замечал это.

1.
Код AS1/AS2:
var step=sss;
 
function placeBug() {
	lev++;
	var d = _root.bug.duplicateMovieClip("bg" + lev, lev);
		d._x =xxx;
		d._y =yyy; 
	           d._rotation =rrr; 
 
d.onEnterFrame=function(){	
 
var angle =this._rotation*3.141/180;
 
var bugX = this._x + step * _global.Math.cos(angle);
var bugY = this._y + step * _global.Math.sin(angle);
 
var myPoint1:Object = {x:7, y: 6}; this.localToGlobal(myPoint1);
var myPoint2:Object = {x:7, y:-6}; this.localToGlobal(myPoint2);
 
   if (land.hitTest(myPoint1.x, myPoint1.y, true)||land.hitTest(myPoint2.x, myPoint2.y, true)){	
 
  if (land.hitTest(myPoint1.x, myPoint1.y, true)){this._rotation-=20;};
  if (land.hitTest(myPoint2.x, myPoint2.y, true)){this._rotation+=20;};
		}else{
		this._x = bugX;
		this._y = bugY;}		
			}	          
 
	}
2.
Код AS1/AS2:
 
var step=sss;
 
function placeBug() {
	lev++;
	var d = _root.bug.duplicateMovieClip("bg" + lev, lev);
		d._x =xxx;
		d._y =yyy; 
	           d._rotation =rrr;           
 
	    bugsArray.push(d);
	}
 
function moveBugs() {
 
var i = _root.bugsArray.length;
var bugsArr  = _root.bugsArray;
 
var b_cos  :Function = _global.Math.cos;
var b_sin   :Function = _global.Math.sin;
 
	while(i--) {
 
var bugA = bugsArr[i];
var angle =bugA._rotation*3.141/180;
var bugX = bugA._x + step * b_cos(angle);
var bugY = bugA._y + step * b_sin(angle);
 
var myPoint1:Object = {x:7, y: 6}; bugA.localToGlobal(myPoint1);
var myPoint2:Object = {x:7, y:-6}; bugA.localToGlobal(myPoint2);
 
if (land.hitTest(myPoint1.x, myPoint1.y, true)
  ||land.hitTest(myPoint2.x, myPoint2.y, true)){	
 
if (land.hitTest(myPoint1.x, myPoint1.y, true)){bugA._rotation-=20;};
if (land.hitTest(myPoint2.x, myPoint2.y, true)){bugA._rotation+=20;};
 
 
		}else{
 
	bugA._x = bugX;
	bugA._y = bugY;}
 
}
}



[/as]

Старый 22.02.2010, 20:27
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 4  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
как вы только в этом что-то понимаете... ну так с виду - несколько раз хиттестите одно и то же, остальное просто мрачно как-то...
__________________
Hell is the possibility of sanity

Старый 22.02.2010, 20:48
an_games вне форума Посмотреть профиль Отправить личное сообщение для an_games Найти все сообщения от an_games
  № 5  
Ответить с цитированием
an_games

Регистрация: Mar 2007
Сообщений: 207
Цитата:
ну так с виду - несколько раз хиттестите одно и то же,
да, я уже заметил косяк), но это на суть проблемы не влияет.

Цитата:
остальное просто мрачно как-то...
это в смысле- не правильно или не понятно?

Цитата:
как вы только в этом что-то понимаете...
упрощенный вариант просто чтоб отразить смысл-
Код AS1/AS2:
 
function place_mc() {
	lev++;
	var d = _root.my_mc.duplicateMovieClip("mc" + lev, lev);
		d._x =xxx;
		d._y =yyy; 
 
 
d.onEnterFrame=function(){
this._x+=2;
this._y+=2;	
 }
 
}
Код AS1/AS2:
 
function place_mc() {
	lev++;
	var d = _root.my_mc.duplicateMovieClip("mc" + lev, lev);
		d._x =xxx;
		d._y =yyy; 
 
 
	    mcArray.push(d);
	}
 
function move_my_mc() {
 
var i = _root.mcArray.length;
var mcArr  = _root.mcArray;
 
	while(i--) {
 
mcArr[i]._x+=2;
mcArr[i]._y+=2;
 
}
}
думаю просто раньше код с циклом был совершенно не оптимизирован и при тесте с большим кол-вом обьектов работал медленне, впрочем еще не уверен

Старый 23.02.2010, 01:23
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 6  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Просто как-то год, а может два назад еще как-то писали на AS2 по-приличнее А сейчас на это страшно смотреть. Это не обязательно к вам относится, это так, "общее наблюдение". Просто, по-чесному, AS2 пишется в классах, не пользуются вложеными функциями, указывают тип переменных.
Да, и просто очень тяжело понимать, что вы пишете с таким форматированием
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 23.02.2010 в 01:26.
Старый 23.02.2010, 03:40
an_games вне форума Посмотреть профиль Отправить личное сообщение для an_games Найти все сообщения от an_games
  № 7  
Ответить с цитированием
an_games

Регистрация: Mar 2007
Сообщений: 207
если честно, я занимаюсь флешем не профессионально, даже ни одной книжки еще не читал, все по исходникам и статьям, так что культуру програмирования не привил, но сейчас планирую почитать про AS3 и вникнуть, наконец, в ООП.

Создать новую тему Ответ Часовой пояс GMT +4, время: 17:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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