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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.04.2010, 19:27
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
По умолчанию Particles, псевдо 3д

Требуется сделать вот что:
Что то типа пространства, в котором в воздухе висят кружочки, и в этом пространстве можно поворачиваться по горизонтали (крутить головой влево-вправо). Кружочки деформациям подвергаться не должны.
Как я это дело представляю:
если представить это дело в проекции камеры сверху - всё элементарно просто: двигаю каждый из кружков по надобности по формулам из школы:
Код AS3:
x=Math.cos(angle)*100;
y=Math.sin(angle)*100;
Когда перехожу к пространству возникают проблемы - у меня голова никак не может сообразить, как это дело сделать. Сижу 2 вечер =\

Теория, до которой допёр:
Можно видеть лишь 1/4 возможных положений частицы в пространстве. Область просмотра 90 градусов, значит делаем частицу невидимой, если угол между наблюдателем и частицой не лежит в пределах угол поворота+90. С этим всё понятно.
Делаю частицу и двигаю её, всё хорошо. Камасутра начинается когда частицы 2, и они находятся на разных растояниях от наблюдателя. Единственное что приходит в голову - это
Код AS3:
_x = Math.sin(_viewerAngle / coff);
где coff зависит от расстояния до наблюдателя, но подход похоже не годится вовсе - нету какого-то коэфицента, при котором смотрелось бы симпатично - чаще одна из частиц что подальше успевает сделать 1.5-2 оборота, пока первая кое как доползает до конца.

Есть какие нибудь идеи, как сделать?

Старый 06.04.2010, 20:56
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
имо в этой ситуации по-любому надо хранить 3D координаты частиц, тогда все логично и просто,
поиграйся с таким раскладом
Код AS3:
package 
{
	import flash.display.*;
	import flash.events.*;
	import flash.ui.*;
 
	public class Main extends Sprite 
	{
		private var _stars:Array = [];
		private var _num:int = 200;
 
		public function Main():void 
		{
			for (var i:int = 0; i < _num; i++) 
			{
				var star:Star = new Star();
				_stars.push(star);
				addChild(star);
			}
			stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
		}
 
		private function onKeyDown(event:KeyboardEvent):void 
		{
			if (event.keyCode == Keyboard.LEFT) rotate( -0.01);
			if (event.keyCode == Keyboard.RIGHT) rotate( 0.01);
		}
 
		private function rotate(angle:Number):void
		{
			for (var i:int = 0; i < _num; i++) (_stars[i] as Star).rotate(angle);
 
		}
	}
}
Код AS3:
package  
{
	import flash.display.*;
	import flash.geom.*;
 
	public class Star extends Shape
	{
		public static const RADIUS:Number = 500;
		public static const CENTER:Point = new Point(250, 250);
		//3D координаты
		private var _pX:Number;
		private var _pY:Number;
		private var _pZ:Number;
 
 
		public function Star() 
		{
			graphics.lineStyle(4, 0xFFFFFF);
			graphics.lineTo(0.5, 0);
 
			_pX = 2 * RADIUS * (0.5 - Math.random());
			_pY = 2 * RADIUS * (0.5 - Math.random());
			_pZ = 2 * RADIUS * (0.5 - Math.random());
			rotate(0);
		}
 
		public function rotate(angle:Number):void
		{
			var sin:Number = Math.sin(angle);
			var cos:Number = Math.cos(angle);
			var ty:Number = _pX;
 
			_pX = _pX * cos + _pZ * sin;
			_pZ = _pZ * cos - ty * sin;
 
			x = CENTER.x + _pX;
			y = CENTER.y + _pY;
			scaleX = scaleY = RADIUS / (RADIUS - _pZ);
 
			var viewAngle:Number = Math.atan2(_pZ, _pX);
			visible = viewAngle < 0;
		}
	}
}

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

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Ого, прям с кодом) Спасибо большое, сейчас посмотрю

Старый 06.04.2010, 22:30
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 4  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Да, всё здорово - только меня маленько муза посетила и я закончил свой вариант.
Мне кажется в обоих вариантах - ну что то явно прям не айс...
Вот ключевые моменты моего варианта:
Я задаю точку, где нахожусь я и точку, где находится звезда, нахожу расстояние между мной и звездой и угол:
Код AS3:
_dist = Point.distance(_thisPoint, _center);
_offsetAngle = Math.atan2(_thisPoint.y - _center.y, _thisPoint.x - _center.x);
А после для отображения: (_viewerAngle - угол поворота камеры у игрока)
Код AS3:
var s:Number = _viewerAngle + _offsetAngle;
var cos:Number = Math.cos(s);
var sin:Number = Math.sin(s);
_visible = (sin<0 && cos>0);
 
_x3D = cos * (MainConfig.WIDTH+_particle.width);
_size = (WorldConfig.MAX_DISTANCE_FROM_SPARK - _dist) / 100;
Имена констант говорят за себя... получилось вот что (см. аттач).

Как то оба варианта "так себе", хотя твой видится более перспективным. Попробую его ковырять конкретно.
Вложения
Тип файла: swf Aeronault.swf (4.4 Кб, 90 просмотров)

Старый 06.04.2010, 22:38
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 5  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
интересно откуда у тебя параллакс, если твоя голова только поворачивается, но не перемещается, а?
__________________
Поймай яблоко 2!

Старый 06.04.2010, 23:02
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 6  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Цитата:
Сообщение от Zebestov Посмотреть сообщение
интересно откуда у тебя параллакс, если твоя голова только поворачивается, но не перемещается, а?
Это где ты параллакс увидел?

Добавлено через 18 минут
Хм..склоняюсь к мысли,что наверное всё лучше сделать в 3д-позиционировании, т.к. было решено добавить возможность движение камеры в пространстве.
Есть у кого нибудь почитать что нибудь сьедобное про это?

Старый 06.04.2010, 23:28
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от Psycho Tiger Посмотреть сообщение
Это где ты параллакс увидел?
может неправильно выразился. я о том эффекте, который заставляет шарики двигаться относительно друг друга. такого при панорамном обзоре из одной точки быть не должно.
__________________
Поймай яблоко 2!

Старый 06.04.2010, 23:54
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
А они относительно друг друга и не двигаются - нужно только относительно камеры.
Хотя, уже не актуально - камера будет двигаться.

Старый 07.04.2010, 00:32
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 9  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
актуально, если ты будешь работать на этом же движке.
у тебя при повороте головы визуально шарики двигаются относительно друг друга — обнаружил бы этот баг пока не поздно
__________________
Поймай яблоко 2!

Старый 07.04.2010, 14:59
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 10  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,601
Записей в блоге: 17
Поломав голову решил, что нафиг изобретать велосипед и обнаружил замечательные классы Sprite2D у Sandy и Five3D, как раз то что мне нужно. Теперь вот не знаю, какой движок выбрать =)

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

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

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


 


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


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