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

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

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

Регистрация: May 2009
Сообщений: 33
По умолчанию Работа с экземплярами

Всем день добрый! В общем есть некий экземпляр ball в библиотеке и каждый раз при нажатии мышки он аттачицца на сцену с именем "ball"+i. У каждого шарика есть ряд свойств: скорость, эластичность итд.
В каждом кадре необходимо проделывать с каждым шариком определенные действия в зависимости от его свойств. Каким образом удобнее это оргинизовать? Получается с одним делать но их может быть любое количество.

Добавлено через 2 часа 6 минут
Может классами как в АС3

Старый 28.12.2010, 23:56
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 2  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Цитата:
Сообщение от BLOOD585 Посмотреть сообщение
В каждом кадре необходимо проделывать с каждым шариком определенные действия в зависимости от его свойств. Каким образом удобнее это оргинизовать?
Циклом
Код:
for (j=1; j<=maxi; j++) { this["ball"+j]._alpha = ...; }
например. Или _root[..], смотря где и как пишете и куда аттачите.

Старый 31.12.2010, 21:49
BLOOD585 вне форума Посмотреть профиль Отправить личное сообщение для BLOOD585 Найти все сообщения от BLOOD585
  № 3  
Ответить с цитированием
BLOOD585

Регистрация: May 2009
Сообщений: 33
А каким образом лучше организовать хранение параметров каждого нового объекта и соответственно обращение к ним при выполнении действий над объектом?

Старый 31.12.2010, 23:26
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 4  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
Можно хранить прямо в каждом мувиклипе, например this["ball"+j].myParam1.

Старый 10.01.2011, 17:03
BLOOD585 вне форума Посмотреть профиль Отправить личное сообщение для BLOOD585 Найти все сообщения от BLOOD585
  № 5  
Ответить с цитированием
BLOOD585

Регистрация: May 2009
Сообщений: 33
Подскажите пожалуйста значение this.ball3.vx?0:2

Код AS1/AS2:
for( var i=0;i<4;i++) this['ball'+i].vx=this['ball'+i].vy=this.ball3.vx?0:2;

Старый 10.01.2011, 19:03
rainbowrussia вне форума Посмотреть профиль Отправить личное сообщение для rainbowrussia Найти все сообщения от rainbowrussia
  № 6  
Ответить с цитированием
rainbowrussia
 
Аватар для rainbowrussia

Регистрация: Feb 2008
Сообщений: 560
this.ball3.vx?0:2 это "если this.ball3.vx истина, то 0 иначе 2". Другими словами
Код AS1/AS2:
for( var i=0;i<4;i++) {
  if (this.ball3.vx) {
    this['ball'+i].vx = 0;
    this['ball'+i].vy = 0;
  } else {
    this['ball'+i].vx = 2;
    this['ball'+i].vy = 2;
  }
}

Старый 11.01.2011, 00:49
BLOOD585 вне форума Посмотреть профиль Отправить личное сообщение для BLOOD585 Найти все сообщения от BLOOD585
  № 7  
Ответить с цитированием
BLOOD585

Регистрация: May 2009
Сообщений: 33
Нашел хороший исходник по столкновению мячей, но там изначально сталкиваются 4 мяча уже выложенные на сцену. Попытался переделать чтобы мячи появлялись при нажатии мыши и любое количество, но мячи просто стоят теперь.
Первоначальный код:
Код AS1/AS2:
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;
 
}
Мои попытки
Код AS1/AS2:
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.
Старый 11.01.2011, 01:09
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 8  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
BLOOD585, вы что трафик на пробелах экономите? Бинарные операторы хотя-бы отделяли от операндов, иначе ваш код читать невозможно. За табуляцию хоть спасибо.

Старый 11.01.2011, 01:17
BLOOD585 вне форума Посмотреть профиль Отправить личное сообщение для BLOOD585 Найти все сообщения от BLOOD585
  № 9  
Ответить с цитированием
BLOOD585

Регистрация: May 2009
Сообщений: 33
Здесь сами функции читать не надо они готовые без изменений остались, над чтобы шарики при нажатии появлялись)) Моя только функция при нажати


Последний раз редактировалось BLOOD585; 11.01.2011 в 01:35.
Старый 11.01.2011, 11:59
BLOOD585 вне форума Посмотреть профиль Отправить личное сообщение для BLOOD585 Найти все сообщения от BLOOD585
  № 10  
Ответить с цитированием
BLOOD585

Регистрация: May 2009
Сообщений: 33
Вот исходник
Вложения
Тип файла: rar 1.rar (4.7 Кб, 30 просмотров)

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

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

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


 


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


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