![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 207
|
здравствуйте, не однократно наблюдал следующее:
это касается различных ситуаций, например-аттачу на сцену несколько клипов, которые перемещаются по ней, взаимодействуя при помощи, например, хит теста с клипом-препятствием. реализую это дело двумя способами- 1. при создании каждого клипа присваиваю ему функцию mc.onEnterFrame(){} c расчетом столкновения. 2.забиваю все клипы в массив и с помощью цикла расчитываю столкновения для всех клипов массива. так вот, расчетчего-либо для клипа по 1 варианту, визуально, работае быстрее чем 2 при одинаковом алгоритме этого расчета. вопрос- с чем это связано? спасибо. |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 207
|
всех случаев я не припомню, но обычно я делаю по 2 варианту и меня это устраивает, тк особо сложных расчетов я не делал, но сейчас я хочу использовать ниже приведенный код в котором последний раз замечал это.
1. 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;} } } 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] |
|
|||||
|
Modus ponens
|
как вы только в этом что-то понимаете... ну так с виду - несколько раз хиттестите одно и то же, остальное просто мрачно как-то...
__________________
Hell is the possibility of sanity |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 207
|
Цитата:
Цитата:
Цитата:
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; } } |
|
|||||
|
Modus ponens
|
Просто как-то год, а может два назад еще как-то писали на AS2 по-приличнее
А сейчас на это страшно смотреть. Это не обязательно к вам относится, это так, "общее наблюдение". Просто, по-чесному, AS2 пишется в классах, не пользуются вложеными функциями, указывают тип переменных.Да, и просто очень тяжело понимать, что вы пишете с таким форматированием ![]()
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 23.02.2010 в 01:26. |
|
|||||
|
Регистрация: Mar 2007
Сообщений: 207
|
если честно, я занимаюсь флешем не профессионально, даже ни одной книжки еще не читал, все по исходникам и статьям, так что культуру програмирования не привил, но сейчас планирую почитать про AS3 и вникнуть, наконец, в ООП.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|