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

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

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

Регистрация: Dec 2010
Сообщений: 129
Question "Туман войны" или не видимая область для игрока.

Доброе...
Подскажите пожалуйста, как можно реализовать область, которую персонаж видит и не видит?
Поясню на примере.
Есть лабиринт, стрелками клавиатуры происходит управление персорнажем. Хочу сделать, так чтобы, когда игрок появился он не видел весь лабиринт, он был бы черным, и только делая шаг за шагом, он бы его открывал.
Так вроде понятней)
У меня была идея разместить много черных квадратиков и когда бы объект с ними соприкасался, они бы исчезали, открывая область. Но может это не правильный вариант? И тогда придеться накладывать много кусочков, для более плавного открытия области.
Или может масками как то?
Подскажите пожалуйста.
Спасибо.
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 567
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Ну можно еще в спрайте туман отрисовать, а потом по мере прохождения его стирать, ну и ещё какой-нить фильтр накинуть типо черного глоу для реализма тьмы. Но это как мне кажется идея не самая лучшая.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Можно просто отрисовывать область только вокруг персонажа.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Dec 2010
Сообщений: 129
Цитата:
Сообщение от SuriTheAngel Посмотреть сообщение
Можно просто отрисовывать область только вокруг персонажа.
Мне нужно, чтобы после прохождения участка область осталась видимой...
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

Старый 27.05.2014, 15:59
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 5  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну значит, сохранять карту видимости в отдельный массив, и добавлять в него область вокруг персонажа.
Это если вы хотите получить более-менее оптимизированный результат(как можно меньше лагов).
Если не важно, то можете хоть прямоугольниками чёрными закрывать.
__________________
There is no thing in this world that is not simple.

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

Регистрация: Dec 2010
Сообщений: 129
Тое сть в массив зоняю и отслеживаю столкноввения и стираю. верно понял?

Добавлено через 14 минут
Возник вопрос. а как правильно размешать, пусть например. черные квадраты на сцене?
Есть у меня объект blackBox. создаю массив количесвом равным отношений сторон всей области и размерами моего черного объекта? Типа первый помешаю в координаты 0,0, второй в координпту 0+ширина черного объекта? И так же по игрику?
Чтот запутался)
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

Старый 27.05.2014, 16:33
ZackMercury вне форума Посмотреть профиль Отправить личное сообщение для ZackMercury Найти все сообщения от ZackMercury
  № 7  
Ответить с цитированием
ZackMercury
 
Аватар для ZackMercury

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Циклом расставляете.
Код AS3:
var blackBoxes:Vector.<MovieClip> = new Vector.<MovieClip>();
 
for(var oy:int = 0; oy < MAP_HEIGHT; oy ++)
{
for(var ox:int = 0; ox < MAP_WIDTH; ox ++)
{
var blackBox:BlackBox = new BlackBox();
blackBox.x = ox * blackBox.width;
blackBox.y = oy * blackBox.height;
addChild(blackBox);
blackBoxes.push(blackBox);
}
}
Ну или width и height поменяете в координатах на нужные вам.

P.S. Извиняюсь за форматирование, просто в браузере не хочет отступать кнопкой TAB.
__________________
There is no thing in this world that is not simple.

Старый 27.05.2014, 16:51
firefedot вне форума Посмотреть профиль Отправить личное сообщение для firefedot Найти все сообщения от firefedot
  № 8  
Ответить с цитированием
firefedot
 
Аватар для firefedot

Регистрация: Dec 2010
Сообщений: 129
Спасибо, сейчас попробую...

Добавлено через 6 минут
Получилось, так сказать сетка для тумана готова)
Спасибо.
А чтобы его открывать. туман войны. нужно искать столкновения с вектором?

Добавлено через 14 минут
Что-то потерялся я)
Код AS3:
 if (blackBox.hitTestPoint(mx,my,true)){
	 trace(mx,my);
 	 removeChild(blackBox);
	}
mx,my координаты мыши. Но тут даже трейс невыводит... тыкаю везде. где можно)
а тогда с чем мне искать столкновение?)
Код AS3:
trace(blackBox.x);
Выдает координату самого последнего созданного кусочка...
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,921
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Ну, можно проверять вхождение в радиус вокруг персонажа каждый кусочек ежекадрово.
Код AS3:
var distance:Number = Math.sqrt((blackBoxes[i].x - player.x)*(blackBoxes[i].x - player.x) + (blackBoxes[i].y - player.y)*(blackBoxes[i].y - player.y));
if(distance <= ...) removeChild(blackBoxes[i]);
Добавлено через 3 минуты
Цитата:
Выдает координату самого последнего созданного кусочка...
В моём примере куски загоняются в массив кусков blackBoxes.
Чтобы пройтись по всем кускам, используется такая конструкция

Код AS3:
for(var i :int = 0; i < blackBoxes.length; i ++)
{
//Здесь проводим операции с каждым куском(каждый кусок доступен как blackBoxes[i])
}
__________________
There is no thing in this world that is not simple.

Старый 27.05.2014, 17:16
firefedot вне форума Посмотреть профиль Отправить личное сообщение для firefedot Найти все сообщения от firefedot
  № 10  
Ответить с цитированием
firefedot
 
Аватар для firefedot

Регистрация: Dec 2010
Сообщений: 129
Спасибо, элемент принаведении мыши удаляется, но выходит ошибка в окне вывода:
Код:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
	at flash.display::DisplayObjectContainer/removeChild()
	at shadowwar_fla::MainTimeline/speedPers()[shadowwar_fla.MainTimeline::frame1:35]
Ругается на строку:
Код:
if(distance <= 10) removeChild(blackBoxes[i]);
так понимаю. условие уродское я ему дал?)

Добавлено через 1 минуту
Вот мой код. чую. что где то накосячил. а где, не пойму...
Код AS3:
var mx,my:int;
var blackBoxes:Vector.<MovieClip> = new Vector.<MovieClip>();
 
for(var oy:int = 0; oy < 14; oy ++)
{
for(var ox:int = 0; ox < 20; ox ++)
{
var blackBox:black = new black();
blackBox.x = ox * blackBox.width;
blackBox.y = oy * blackBox.height;
addChild(blackBox);
blackBoxes.push(blackBox);
}
}
 
addEventListener(Event.ENTER_FRAME, speedPers);
 
function speedPers(event:Event):void{
	for(var i :int = 0; i < blackBoxes.length; i ++)
{
	mx=mouseX;
        my=mouseY;
var distance:Number = Math.sqrt((blackBoxes[i].x - mx)*(blackBoxes[i].x - mx) + (blackBoxes[i].y - my)*(blackBoxes[i].y - my));
if(distance <= 10) removeChild(blackBoxes[i]);
}
	}
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

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

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


 


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


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