![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2009
Сообщений: 33
|
Всем день добрый! В общем есть некий экземпляр ball в библиотеке и каждый раз при нажатии мышки он аттачицца на сцену с именем "ball"+i. У каждого шарика есть ряд свойств: скорость, эластичность итд.
В каждом кадре необходимо проделывать с каждым шариком определенные действия в зависимости от его свойств. Каким образом удобнее это оргинизовать? Получается с одним делать но их может быть любое количество. Добавлено через 2 часа 6 минут Может классами как в АС3 |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Цитата:
|
|
|||||
|
Регистрация: May 2009
Сообщений: 33
|
А каким образом лучше организовать хранение параметров каждого нового объекта и соответственно обращение к ним при выполнении действий над объектом?
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Можно хранить прямо в каждом мувиклипе, например this["ball"+j].myParam1.
|
|
|||||
|
Регистрация: May 2009
Сообщений: 33
|
Подскажите пожалуйста значение this.ball3.vx?0:2
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
this.ball3.vx?0:2 это "если this.ball3.vx истина, то 0 иначе 2". Другими словами
|
|
|||||
|
Регистрация: May 2009
Сообщений: 33
|
Нашел хороший исходник по столкновению мячей, но там изначально сталкиваются 4 мяча уже выложенные на сцену. Попытался переделать чтобы мячи появлялись при нажатии мыши и любое количество, но мячи просто стоят теперь.
Первоначальный код: var col:Number=4;//Количество мячей MovieClip.prototype.kick=function(ball){ var fi=Math.atan2(ball.y-this.y,ball.x-this.x); var adir=Math.atan2(this.vy,this.vx); var bdir=Math.atan2(ball.vy,ball.vx); var av=Math.sqrt(this.vx*this.vx+this.vy*this.vy); var bv=Math.sqrt(ball.vx*ball.vx+ball.vy*ball.vy); var vn=av*Math.sin(adir-fi+Math.PI/2)-bv*Math.sin(bdir-fi+Math.PI/2); var dv1=-2*ball.m/(this.m+ball.m)*vn; var dv2=2*this.m/(this.m+ball.m)*vn; this.vx+=dv1*Math.cos(fi); this.vy+=dv1*Math.sin(fi); ball.vx+=dv2*Math.cos(fi); ball.vy+=dv2*Math.sin(fi); } MovieClip.prototype.ballMove=function(){ for(var j=this.id+1;j<col;j++){ var other=balls[j]; var dx=this.x+this.vx-other.x-other.vx; var dy=this.y+this.vy-other.y-other.vy; if(Math.abs(dx)+Math.abs(dy)<this.r+other.r){ var fi=Math.atan2(dy,dx); other._x=this.x-(this.r+other.r+1)*Math.cos(fi); other._y=this.y-(this.r+other.r+1)*Math.sin(fi); this.kick(other); } } if(this.x+this.r+this.vx>200 || this.x-this.r+this.vx<0) this.vx*=-1 if(this.y+this.r+this.vy>80 || this.y+this.vy-this.r<0) this.vy*=-1 if(this.x+this.r>200)this._x=199-this.r; if(this.x-this.r<0)this._x=this.r+1; if(this.y+this.r>80)this._y=79-this.r; if(this.y-this.r<0)this._y=this.r+1; this.x=this._x+=this.vx; this.y=this._y+=this.vy; } _root.onMouseUp=function(){ for( var i=0;i<col;i++) this['ball'+i].vx=this['ball'+i].vy=this["ball"+col].vx?0:2; } for(var i=0,balls=[];i<col;i++){ var b=this['ball'+i]; balls.push(b); b.r=b._height/2;//Радиус b.m=b.r//масса (условно) b.id=i; b.vx=b.vy=0; b.x=b._x; b.y=b._y; b.onEnterFrame=ballMove; } var col:Number=0;//количество шаров MovieClip.prototype.kick=function(ball){ //То же самое } MovieClip.prototype.ballMove=function(){ for(var j=this.id+1;j<col;j++){ //То же самое } _root.onMouseDown = function(){ col+=1; this.attachMovie("ball","ball"+col,col); this["ball"+col]._height=Math.random()*20+15; this["ball"+col]._width=this["ball"+col]._height; this["ball"+col]._y=_ymouse; this["ball"+col]._x=_xmouse; } _root.onMouseUp = function(){ for( var i=0;i<4;i++) this['ball'+i].vx=this['ball'+i].vy=this["ball"+col].vx?0:2; } _root.onEnterFrame=function(){ for(var i=0,balls=[];i<col;i++){ var b=this['ball'+i]; balls.push(b); b.r=b._height/2;//Радиус b.m=b.r//масса (условно) b.id=i; b.vx=0; b.vy=0; b.x=b._x; b.y=b._y; b.ballMove; } } Последний раз редактировалось BLOOD585; 11.01.2011 в 01:20. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
BLOOD585, вы что трафик на пробелах экономите? Бинарные операторы хотя-бы отделяли от операндов, иначе ваш код читать невозможно. За табуляцию хоть спасибо.
|
|
|||||
|
Регистрация: May 2009
Сообщений: 33
|
Здесь сами функции читать не надо они готовые без изменений остались, над чтобы шарики при нажатии появлялись)) Моя только функция при нажати
Последний раз редактировалось BLOOD585; 11.01.2011 в 01:35. |
|
|||||
|
Регистрация: May 2009
Сообщений: 33
|
Вот исходник
|
![]() |
![]() |
Часовой пояс GMT +4, время: 17:30. |
|
|
« Предыдущая тема | Следующая тема » |
|
|