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

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

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

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

Добрый день.
Есть у меня "туман войны", который сделан из много-много черных квадратиков.
Но тут посетила идея сделать не просто черным все, нарисовать картинку прям тумана и ее открывать.
Скажите пожалуйста, как можно это реализовать.
Взять готовую картинку и ее как то распилить и постепенно открывать?
Вот как у меня сейчас все работает:
Код AS3:
 
public var blackBoxes:Vector.<MovieClip> = new Vector.<MovieClip>();
 
function shadowWar(){
 addChild(conteinerWar);
for(var oy:int = 0; oy < 54; oy ++)
{
for(var ox:int = 0; ox < 72; ox ++)
{
var blackBox:black = new black();
blackBox.x = ox * blackBox.width;
blackBox.y = oy * blackBox.height;
conteinerWar.addChild(blackBox);
blackBoxes.push(blackBox);
 
}
 
//Функция удаления тумана 
function deletWar(){
 
for (var i = 0; i < blackBoxes.length; i++)
{	
	if(stage.contains(blackBoxes[i])){
	conteinerWar.removeChild(blackBoxes[i]);
	}else{
		//trace("Элемент тумана удален персонажем");
		}
}
	blackBoxes = new Vector.<MovieClip>();
	removeChild(conteinerWar);
	trace(blackBoxes.length);
 
}
 
//В этой функции я открываю туман
function lvl_1(){
 
...
 
for(var i :int = 0; i < blackBoxes.length; i ++)
{
	var distance:Number = Math.sqrt((blackBoxes[i].x - hero_2.x)*(blackBoxes[i].x - hero_2.x) + (blackBoxes[i].y - hero_2.y)*(blackBoxes[i].y - hero_2.y));
if(distance <= 40 && this.contains(blackBoxes[i]))
  conteinerWar.removeChild(blackBoxes[i]);
}
...
 
}
Скажите, как можно мне переделать все под нормальный и желанный вид)
Нарисовать большую картинку, нужного размера и ее разрезать или сделать бесшовную текстуру?
И может есть способ открывать область не квадратиками, а более мягко?
В общем буду раз любой помощи информации.
Спасибо.
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Можно либо через маску, либо через BlendMode.ERASE, или как-то так.

Добавлено через 1 минуту
А можно вообще этот туман рисовать кривыми, тогда будет плавно и как вам нужно.
__________________
Я заклинаю вас действовать иначе.

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

блогер
Регистрация: Jul 2013
Адрес: Север
Сообщений: 1,918
Записей в блоге: 23
Отправить сообщение для ZackMercury с помощью ICQ Отправить сообщение для ZackMercury с помощью Skype™
Bletraut, ещё можно через setPixel, так можно и плавно и как угодно вообще)
Через маску тоже можно плавно.
А рисовать можно просто BitmapData.draw(... ..., color:uint);
__________________
There is no thing in this world that is not simple.

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

Регистрация: Dec 2010
Сообщений: 129
Попробовал через макску. Вроде нормально, но не могу понять как сделать, чтобы уже открытые части оставались открытыми...
Вот написал простой код:
Код AS3:
import flash.events.MouseEvent;
import flash.display.MovieClip;
import flash.display.Sprite;
 
var imageMask:Sprite = new masker();
var box:Sprite = new boxer();
var container:Sprite = new Sprite();
addChild(container);		
container.addChild(box);
container.mask = imageMask;
 
	addChild(imageMask);
 
	addEventListener(Event.ENTER_FRAME, maskCreate);
 
	function maskCreate(event:Event):void{
		imageMask.x=mouseX;
		imageMask.y=mouseY;
	}
Этот код просто водит маску за мышкой, а как сделать, что маска оставалась на пройденных местах?
Дублировать маску? так ее может быть очень много и она вся будет следовать за объектом....
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

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

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

Регистрация: Dec 2010
Сообщений: 129
То есть взять картинку, сделать маской...
а а вот про как в ее битмапдате сделать маску не понял)
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Цитата:
То есть взять картинку, сделать маской...
а а вот про как в ее битмапдате сделать маску не понял)
Рисуешь битмап своего тумана войны, потом там где чел прошел стираешь эту самую битмап.

Для большего реализма можно фильтр какой-нить накинуть на неё.
__________________
Я заклинаю вас действовать иначе.

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

Регистрация: Dec 2010
Сообщений: 129
А стирать чем?
Erase?

Добавлено через 1 час 20 минут
пробовал так .. но у меня картинка получается под маской. а как сделать на оборот не пойму ... про erase нормально найти не могу:
Код AS3:
var pic_msk_data:BitmapData = new bg_clear();
 
var mymask:Sprite = new Sprite();
 
addChild(mypic_stage);
addChild(mymask);
 
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoves); 
 
function onMouseMoves(event:MouseEvent):void
{	
		mymask.graphics.beginBitmapFill(pic_msk_data);
		mymask.graphics.drawCircle(mouseX, mouseY, 40);
		mymask.graphics.endFill();*/
 
}
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Не не, если через bitmap, то не ERASE. Рисуешь просто черную битмапдату, и потом в ней где персонаж ходит просто рисуешь прозрачные пиксели через draw. Или через copyPixels копируешь пиксели из битмапдаты "света" в битмапдату "тумана".
__________________
Я заклинаю вас действовать иначе.

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

Регистрация: Dec 2010
Сообщений: 129
Так)
У меня есть картинка тумана. я ее нарисовал. красивая)))
Я ее хочу стирать)
То есть я под нее делаю draw.transpaert = true? или как там, типа разрешаю прозначность? и делаю такую же площать, как и картинка тумана?
__________________
--
Какой бы путь ты не выбрал, лягушка прыгнет врятли

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

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

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


 


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


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