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

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

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

Регистрация: Feb 2010
Адрес: YcBvKFtbbu
Сообщений: 94
Отправить сообщение для firuz с помощью ICQ Отправить сообщение для firuz с помощью Skype™
По умолчанию Переворачивание карт (3D вращение)

Всем привет. Столкнулся с задачей осуществления переворачивания карточек.
Имеется картинка. Ее надо разбить на 24 квадратика. Получатся карточки.
Положить их на сцену "рубашкой наверх".
А потом, случайным (а может быть заданным. пока все-равно) порядком переворачивать.

Главное что-бы переворачивание выглядело реалистично.

Я знаю, есть всякие пакеты построения трехмерных моделей. Ими сложно пользоваться, но научиться можно.
А вот как цельную картинку разбить на кусочки так, что бы кусочки представляли собой отдельные объекты с которыми можно работать?

Есть у кого какие идеи? Подскажите, пожалуйста.


Разрезать исходную картинку вне флеша я пока не принимаю во внимание, поскольку предполагаю, что есть возможность сделать это программно. Но если программно займет много времени и ресурсозатрат, то конечно буду резать вне флеша.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Да ничего сложного-то =) Вот, примерно так
Код AS3:
package {
 
	import flash.display.BitmapData;
	import flash.geom.Point;
	import flash.geom.Rectangle;
 
	/**
	 * ...
	 * @author gloomyBrain
	 */
 
	public class Generator {
 
		public static function getBitmaps(src:BitmapData, cols:int, rows:int):Vector.<BitmapData> {
 
			var result:Vector.<BitmapData> = new Vector.<BitmapData>(cols * rows, true);
			var ind:int = 0;
 
			var w:int = src.width / cols;
			var h:int = src.height / rows;
			var rect:Rectangle = new Rectangle(0, 0, w, h);
 
			for (var r:int = 0; r < rows; r++) { // r is row number
 
				rect.y = r * h;
 
				for (var c:int = 0; c < cols; c++) { // c is column number
 
					rect.x = c * w;
					ind = r * cols + c;
 
					result[ind] = new BitmapData(rect.width, rect.height, false);
					result[ind].copyPixels(src, rect, new Point(0, 0));
 
				}
 
			}
 
			return result;
 
		}
 
	}
 
}
Ну, это что касается разрезания. А вращение сделать не сложно. Используйте один объект Bitmap и 2 BitmapData (обложка и не обложка). Просто в нужный момент меняйте свойство Bitmap.bitmapData на ту битмапдату, которую нужно отобразить
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 22.07.2010 в 21:26.
Старый 22.07.2010, 22:28
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 3  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
А переворачивать можете, используя 3D трансформации. Рубашку менять на изображение, когда карта повернута к зрителю ребром.

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

Регистрация: Feb 2010
Адрес: YcBvKFtbbu
Сообщений: 94
Отправить сообщение для firuz с помощью ICQ Отправить сообщение для firuz с помощью Skype™
Ух ты! получается нужно сделать клип с картинкой кземпляром класса Generator и вызвать метод getBitmaps.

А результатом выйдут порезанные картиночки.
А результатом будут объекты result[ind] - массив этих картинок. Я правильно понял?

а как к ним обращаться?
Или это я уже перебрал с нескромностью?

Старый 23.07.2010, 01:47
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 5  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
осталось как то сделать закругленные углы

Старый 23.07.2010, 10:49
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 6  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
осталось только в цикле создать спрайты, запихнуть туда картинки, расставить их по местам, подписать их на событие или рандомно проходиться по элементам массива и применить к ним псевдо 3d трансформацию вращения.

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

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Закругленные углы:

Внизу Bitmap, у которой по необходимости меняем bitmapData. Сверху маской Shape, в нем graphics.drawRoundRect(...)

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

Регистрация: Feb 2010
Адрес: YcBvKFtbbu
Сообщений: 94
Отправить сообщение для firuz с помощью ICQ Отправить сообщение для firuz с помощью Skype™
а зачем закругленные углы. Мне они не нужны.
Сцена выглядит так:

На белом поле переворачиваются сами собой последовательно прямоугольнички (карточки), на обратно стороне которых части изображения. Когда все карточки перевернуты на сцене полноценная картинка. И так с несколькими картинками.
Что-то типа мозайки получается.

так как обратиться мне к результатам представленного класса?
Не так ли как я предположил в предыдущем своем сообщении?

Старый 23.07.2010, 13:16
AlexDesinger вне форума Посмотреть профиль Отправить личное сообщение для AlexDesinger Посетить домашнюю страницу AlexDesinger Найти все сообщения от AlexDesinger
  № 9  
Ответить с цитированием
AlexDesinger

Регистрация: Feb 2007
Сообщений: 563
про углы эт шутка, обращайтесь к элементам массива, это удобнее всего.

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

Регистрация: Feb 2010
Адрес: YcBvKFtbbu
Сообщений: 94
Отправить сообщение для firuz с помощью ICQ Отправить сообщение для firuz с помощью Skype™
Друзья! Как мне теперь каждый разрезанный кусочек превратить в DisplayObject, что бы я мог с ним работать?
Так, это код в первом кадре. Я изменил немного подход GloomyBrain, написав это все не в классе.

Код AS3:
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
 
/**
 * ...
 * @author gloomyBrain. 
 Изменял я :)
 */
 
// создаем БигКартинка экземпляр класса pictt - расширение MovieClip. Просто мувик из библиотеки.
var BigKartinka:pictt=new pictt();
 
//создаем БитМапдату для помещения туда картинки
var myPic:BitmapData=new BitmapData(240,400);
 
// рисуем в БитмапДату нашу БигКартинку
myPic.draw(BigKartinka);
 
//создаем массив для хранения кусочков. НО ЗАЧЕМ? я зачем-то это придумал. а смысла ноль.
var picAr:Array = new Array();
 
//применяем функцию гетБитмапс к нашей битмапе с БигКартинка
getBitmaps(myPic, 4, 6);
 
 
 
function getBitmaps(src:BitmapData, cols:int, rows:int):Vector.<BitmapData> {
 
	var result:Vector.<BitmapData>=new Vector.<BitmapData>(cols*rows,true);
	var ind:int=0;
 
	var w:int=src.width/cols;
	var h:int=src.height/rows;
	var rect:Rectangle=new Rectangle(0,0,w,h);
 
	for (var r:int = 0; r < rows; r++) {// r is row number
 
		rect.y=r*h;
 
		for (var c:int = 0; c < cols; c++) {// c is column number
 
			rect.x=c*w;
			ind=r*cols+c;
 
			result[ind]=new BitmapData(rect.width,rect.height,false);
			result[ind].copyPixels(src, rect, new Point(0, 0));
 
			// Вот тут мне кажется ошибка. Я просто перегоняю картиночки в массив, не изменяя их. 
                        picAr[ind]=result[ind]; 
		}
 
	}
 
	return result;
 
}
 
// Этот цикл перебирает массив picAr, который как я надеюсь 
// содержит в себе 24 кусочка первоначальной картинки
for (var i:int = 0; i<24; i++) {
 
}

Все компилириуется без ошибок. Но и на экране ничего нет. Оно и понятно. Я ничего на сцену не добавлял.
При попытке добавить на сцену элементы массива picAr, выдается ошибка:

TypeError: Error #1034: Ошибка типа Coercion: невозможно преобразовать flash.display::BitmapData@10ce2151 в flash.display.DisplayObject.
at piiiic_fla::MainTimeline/frame1()


Пытался добавить на экран вот так (последний цикл):
Код AS3:
for (var i:int = 0; i<24; i++) {
	addChild(picAr[i]);
}
Добавлено через 21 час 26 минут
Внутри основного цикла тоже не получается осуществить преобразование..
помогите

Добавлено через 21 час 51 минуту
Ура! получилось!


Последний раз редактировалось firuz; 27.07.2010 в 13:40.
Создать новую тему Ответ Часовой пояс GMT +4, время: 07:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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