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

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

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

Регистрация: Dec 2013
Сообщений: 35
По умолчанию Вопрос.Бесконечный движущийся фон по 2м осям

Приветствую.
Не знаю как правильно реализовать бесконечное движение фона по 2м осям.
Пока попробовал так, но результат не нравится. Создал текстуру bgr и копировал ее 9 раз для замещения, тех участков, что выходят за границы видимости. Движение текстуры вызывает обьект obj, который сам тоже движется.
Чувствую,что все должно быть намного проще.
Еще хочу спросить, как убрать резкий переход при смене направления движения фона?
Смотрел через диспетчер: флешка эта жрет 300 мб памяти.Для изображения 1920*1080 это нормально? Может растрировать как-то или еще что-то?

Код AS3:
stage.displayState = StageDisplayState.FULL_SCREEN;
 
import flash.display.MovieClip;
 
/////
var flag:String = null;
var speedbg:int = 5;
var bg:MovieClip = new bgr  ;
var bg1:MovieClip = new bgr  ;
var bg2:MovieClip = new bgr  ;
var bg3:MovieClip = new bgr  ;
var bg4:MovieClip = new bgr  ;
var bg5:MovieClip = new bgr  ;
var bg6:MovieClip = new bgr  ;
var bg7:MovieClip = new bgr  ;
var bg8:MovieClip = new bgr  ;
 
addChildAt(bg,0);
addChildAt(bg1,0);
addChildAt(bg2,0);
addChildAt(bg3,0);
addChildAt(bg4,0);
addChildAt(bg5,0);
addChildAt(bg6,0);
addChildAt(bg7,0);
addChildAt(bg8,0);
bg.x = 0;
bg.y = 0;
bg1.x = -1920;//stage.stageWidth-stage.stageWidth*2;
bg1.y = 0;
bg2.x = 1920;//stage.stageWidth;
bg2.y = 0;
bg3.x = 0;//stage.stageWidth;
bg3.y = -1080;
bg4.x = 0;//stage.stageWidth;
bg4.y = 1080 * 2;
// и так далее
bg8.x = 1920;
bg8.y = 1080;
//////////////////////////////////////////////
var fnX = -500;
var fnY = 0;
var dir:Number = Math.atan2(mouseY-obj.y, mouseX-obj.x) / Math.PI * 180;
dir +=  180;
var speed:Point = new Point(Math.cos(dir/180*Math.PI), Math.sin(dir/180*Math.PI));
stage.addEventListener(MouseEvent.CLICK, fnGetXY);
addEventListener(Event.ENTER_FRAME, enterFrame);
function enterFrame(e:Event):void
{
	// при положительной скорости идем за курсором
	// при отрицательной - от курсора
	var speed:Number = -1;
	//fnGetXY();
	var p:Point = new Point(fnX - obj.x, fnY - obj.y);
	p.normalize(speed);
 
	obj.x +=  p.x;
	obj.y +=  p.y;
 
	if (bg.x + 1920 < 0)
	{
		startPosition();
	}
	if (bg1.x + 1920 < -1920)
	{
		startPosition();
	}
	if (bg2.x + 1920 == 0)
	{
		startPosition();
	}
	if (bg.x == 1920)
	{
		startPosition();
	}
	if (bg1.x == 0)
	{
		startPosition();
	}
	if (bg2.x == 1920 * 2)
	{
		startPosition();
	}
	if (bg.y==-1080)
	{
		startPosition();
	}
	if (bg.y==1080)
	{
		startPosition();
	}
 
	// и так далее
	////////////////////////////////
	// Влево 
	if (obj.x < fnX)
	{
		bg.x = bg.x - speedbg;
		bg1.x = bg1.x - speedbg;
		bg2.x = bg2.x - speedbg;
		bg3.x = bg3.x - speedbg;
 
	// и так далее
		flag = "left";
 
	}
	//Вправо 
	if (obj.x > fnX)
	{
		bg.x = bg.x + speedbg;
		bg1.x = bg1.x + speedbg;
		bg2.x = bg2.x + speedbg;
		bg3.x = bg3.x + speedbg;
 
	// и так далее
		flag = "right";
	}
	//Вверх
	if (obj.y < fnY)
	{
		bg.y = bg.y - speedbg;
		bg1.y = bg1.y - speedbg;
		bg2.y = bg2.y - speedbg;
		bg3.y= bg3.y - speedbg;
		bg4.y= bg4.y - speedbg;
 
	// и так далее
 
		flag = "up";
	}
	// Вниз 
	if (obj.y > fnY)
	{
		bg.y = bg.y +speedbg;
		bg1.y = bg1.y +speedbg;
		bg2.y = bg2.y +speedbg;
		bg3.y= bg3.y +speedbg;
		bg4.y= bg4.y +speedbg;
 
	// и так далее
 
		flag = "down";
	}
 
 
}
function fnGetXY(event:MouseEvent):void
{
	fnX = stage.mouseX;
	fnY = stage.mouseY;
}
function startPosition():void
{
	bg.x = 0;
	bg1.x = -1920;
	bg2.x = 1920;
	bg3.x = 0;
	bg4.x = 0;
	bg.y=0;
	bg1.y =0;
	bg2.y =0;
	bg3.y = -1080;
	bg4.y = 1080 * 2;
	// и так далее bg5-bg8;
}

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

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

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


 


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


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