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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.12.2012, 01:30
PinGV вне форума Посмотреть профиль Отправить личное сообщение для PinGV Найти все сообщения от PinGV
  № 1  
Ответить с цитированием
PinGV
[+6 17.12.12]

Регистрация: Dec 2012
Сообщений: 34
Attention движение нескольких объектов

Код AS3:
var all_circule:Sprite = new Sprite();
for (i=0; i<100; i++)
{var newCircle:Sprite = new Sprite();
	newCircle.graphics.lineStyle(3, 0x000000);
	newCircle.graphics.beginFill(int(Math.random() * 0xffff) + 0xff0000);
	newCircle.graphics.drawCircle(Math.random() * 450 + 50, Math.random() * 300 + 70, Math.random() * 20 + 15);
	newCircle.graphics.endFill();
	all_circule.addChild(newCircle);
}
Есть контейнер all_circule. Как сделать чтобы при вызове функции Update происходило перемещение шаров, согласно вектору который произвольно задастся при их добавлении, взаимодействие с шарами не учитывается, учитываются рамки самого ролика?
Если шар один то все понятно, а если несколько то как быть?


Последний раз редактировалось PinGV; 19.12.2012 в 02:07.
Старый 19.12.2012, 01:49
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,879
Записей в блоге: 7
А вопрос где?
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 19.12.2012, 12:38
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 3  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Каждый шарик сделайте отдельным классом Ball (например), наследующимся от спрайта и добавьте ему паблик-свойства radius, vx и vy. vx и vy — это компоненты вектора движения.

На момент создания шариков, записывайте ссылки на них в массив. В методе update проходитесь по массиву и добавляйте каждому шарику x += vx, y+=vy. Ну и проверку на столкновения со стенами сделайте. Для правой стенки так: если x + radius > x стенки, то vx *= -1;
__________________
hauts.ru

Старый 19.12.2012, 19:50
PinGV вне форума Посмотреть профиль Отправить личное сообщение для PinGV Найти все сообщения от PinGV
  № 4  
Ответить с цитированием
PinGV
[+6 17.12.12]

Регистрация: Dec 2012
Сообщений: 34
А можно код этого момента
"Каждый шарик сделайте отдельным классом Ball (например), наследующимся от спрайта и добавьте ему паблик-свойства radius, vx и vy. vx и vy — это компоненты вектора движения." и этого
"На момент создания шариков, записывайте ссылки на них в массив. "
А то мне до сих пор не понятно

Старый 19.12.2012, 20:09
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 5  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Main.as:

Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.geom.Rectangle;
 
	/**
	 * ...
	 * @author Hauts
	 */
	public class Main extends Sprite 
	{
		private var _balls:Array;
		private var _totalBalls:int;
		private var _stageRect:Rectangle;
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
			stage.scaleMode = StageScaleMode.NO_SCALE
			stage.showDefaultContextMenu = false;
			stage.align = StageAlign.TOP_LEFT
 
			stage.addEventListener(Event.RESIZE, stageResizeHandler);
			stageResizeHandler(null)
 
			_balls = [];
			_totalBalls = 100;
			var newBall:Ball;
			for (var k:int = 0 ; k < _totalBalls; k ++ ) {
				newBall = new Ball(10 + (Math.random() * 10), 2 + (Math.random() * 18));
				newBall.x = _stageRect.left + Math.random() * _stageRect.width;
				newBall.y = _stageRect.top + Math.random() * _stageRect.height;
				_balls.push(addChild(newBall));
			}
 
			addEventListener(Event.ENTER_FRAME, enterFrameHandler);
		}
 
		private function stageResizeHandler(e:Event):void 
		{
			_stageRect = new Rectangle(0, 0, stage.stageWidth, stage.stageHeight);
		}
 
		private function enterFrameHandler(e:Event):void 
		{
			for (var k:int = 0 ; k < _totalBalls; k++ ) {
				_balls[k].update(_stageRect);
			}
		}
 
	}
 
}
Ball.as:

Код AS3:
package  
{
	import flash.display.Graphics;
	import flash.display.Sprite;
	import flash.geom.Rectangle;
 
	/**
	 * ...
	 * @author Hauts
	 */
	public class Ball extends Sprite 
	{
		public var radius:Number;
 
		private var _vx:Number;
		private var _vy:Number;
 
		public function Ball(radius:Number, speed:Number = 20) 
		{
			this.radius = radius
 
			var randomAngle:Number = Math.PI * 2 * Math.random();
			_vx = Math.cos(randomAngle) * speed;
			_vy = Math.sin(randomAngle) * speed;
 
			var gr:Graphics = this.graphics;
			gr.beginFill(0xFFFFFF * Math.random())
			gr.lineStyle(1);
			gr.drawCircle(0, 0, radius);
			gr.endFill()
 
			gr.moveTo(0, 0);
			gr.lineTo(radius, 0);
		}
		public function update(rect:Rectangle):void 
		{
			x += _vx;
			y += _vy;
 
			if (x > rect.right - radius) {
				_vx *= -1;
				x = rect.right - radius;
			} else if (x < rect.left + radius) {
				_vx *= -1;
				x = rect.left + radius;
			}
 
			if (y > rect.bottom - radius) {
				_vy *= -1
				y = rect.bottom - radius;
			} else if (y < rect.top + radius) {
				_vy *= -1
				y = rect.top + radius
			}
 
			rotation = x
		}
 
		public function constrain(rect:Rectangle):void 
		{
			x = Math.max(rect.left + radius, Math.min(rect.right - radius, x));
			y = Math.max(rect.top + radius, Math.min(rect.bottom - radius, y));
		}
	}
 
}
BallsExample.swf   (1.6 Кб)
Вложения
Тип файла: swf BallsExample.swf (1.6 Кб, 128 просмотров)
__________________
hauts.ru

Старый 19.12.2012, 20:15
PinGV вне форума Посмотреть профиль Отправить личное сообщение для PinGV Найти все сообщения от PinGV
  № 6  
Ответить с цитированием
PinGV
[+6 17.12.12]

Регистрация: Dec 2012
Сообщений: 34
Спасибо вам Hauts, буду разбираться, я могу воспрользоваться частями вашего кода?

Старый 19.12.2012, 20:18
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Конечно, я только за.
__________________
hauts.ru

Старый 19.12.2012, 21:27
PinGV вне форума Посмотреть профиль Отправить личное сообщение для PinGV Найти все сообщения от PinGV
  № 8  
Ответить с цитированием
PinGV
[+6 17.12.12]

Регистрация: Dec 2012
Сообщений: 34
А что такое _stageRect, и для чего он нужен?

Старый 19.12.2012, 21:35
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 9  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Это экземпляр класса Rectangle, описывающего прямоугольную область. В данном примере используется для того, чтобы сообщать всем шарикам границы их "игрового поля", когда передается аргументом в метод update шарика.

Меняется при изменении размеров флэшки, поэтому при любых её размерах шарики будут летать по всей её площади.
__________________
hauts.ru

Старый 19.12.2012, 22:14
Wild вне форума Посмотреть профиль Отправить личное сообщение для Wild Посетить домашнюю страницу Wild Найти все сообщения от Wild
  № 10  
Ответить с цитированием
Wild
 
Аватар для Wild

Регистрация: Dec 2012
Адрес: Екатеринбург
Сообщений: 36
Отправить сообщение для Wild с помощью ICQ Отправить сообщение для Wild с помощью Skype™
Цитата:
Сообщение от PinGV Посмотреть сообщение
А что такое _stageRect, и для чего он нужен?

PinGV если не понимаете некоторые вещи то пользуетесь переводчиком я именно так и поступаю и сразу все становится понятно что для чего и счем его едят. Stage---Сцена Rect----Прямоугольника
StageReact=Сцена прямоугольника (просто совет) у самого с английским беда, заодно и его немного учу)))

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

Теги
движение , несколько объектов , отскок

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

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


 


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


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