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

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

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

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
По умолчанию Меню-карусель

Доброго времени суток.
Только учусь AS но загорелся я таким меню и незнаю как его реализовать. Нашел на AS1/AS2 простенький пример карусели, думаю его немного модернизовать и сделать из него меню, но сначала нужно написать то же на AS3. Пробовал я перевести его но не получается по незнанию. Прошу о помощи.

Вот код на AS1/AS2:
Код:
var numOfBalls:Number = 10;
var radiusX:Number = 250;
var radiusY:Number = 75;
var centerX:Number = Stage.width / 2;
var centerY:Number = Stage.height / 2;
var speed:Number = 0.05;

for(var i=0;i<numOfBalls;i++)
{
	var t = this.attachMovie("ball","b"+i,i+1);
	t.angle = i * ((Math.PI*2)/numOfBalls);
	t.onEnterFrame = mover;
}

function mover()
{
	this._x = Math.cos(this.angle) * radiusX + centerX;
	this._y = Math.sin(this.angle) * radiusY + centerY;
	var s = this._y /(centerY+radiusY);
	this._xscale = this._yscale = s*100;
	this.angle += this._parent.speed;
	this.swapDepths(Math.round(this._xscale) + 100);
}

this.onMouseMove = function()
{
	speed = (this._xmouse-centerX)/1500;
}
Если нужно, вот исходник:
Вложения
Тип файла: zip carousel.zip (21.1 Кб, 321 просмотров)

Старый 01.07.2008, 23:16
BlooDHounD вне форума Посмотреть профиль Отправить личное сообщение для BlooDHounD Посетить домашнюю страницу BlooDHounD Найти все сообщения от BlooDHounD
  № 2  
Ответить с цитированием
BlooDHounD
стервочка (я мужик)
 
Аватар для BlooDHounD

блогер
Регистрация: Mar 2004
Адрес: Борисов
Сообщений: 3,161
Записей в блоге: 22
тоесть вы хотите, что бы за Вас полностью написали класс? раздел работы тут недалеко.

П.С.: обычно в этом разделе спрашивают о проблемах, а не просят сделать всё за них.

Старый 01.07.2008, 23:53
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 3  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
Если вы код, как есть перенесете в класс-файл, оформите его в класс, привяжете его к клипу в библиотеке, замените свойства с подчерком на аналогичные из АС3, swapDepth() на swapChildrenAt(), attachMovie() на addChild(new SomeMyMenuItem()), замените обработчики событий на функции слушающие соответствующие события - по идее будет работать.
Из недостатков этого: кода - t лучше было объявить вне функции. Использовать обращения к свойствам там, где нужно быстро посчитать - не продуктивно. Нет никакой необходимости динамически создавать свойства. Нет типизации.
__________________
Hell is the possibility of sanity

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

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Цитата:
Сообщение от BlooDHounD Посмотреть сообщение
П.С.: обычно в этом разделе спрашивают о проблемах, а не просят сделать всё за них.
Я подумал что проще будет сделать все, чем обьяснять мне каждую проблему. Но в таком случае, я выложу до чего дошел.

Цитата:
Сообщение от wvxvw Посмотреть сообщение
Если вы код, как есть перенесете в класс-файл, оформите его в класс, привяжете его к клипу в библиотеке, замените свойства с подчерком на аналогичные из АС3, swapDepth() на swapChildrenAt(), attachMovie() на addChild(new SomeMyMenuItem()), замените обработчики событий на функции слушающие соответствующие события - по идее будет работать.
Из недостатков этого: кода - t лучше было объявить вне функции. Использовать обращения к свойствам там, где нужно быстро посчитать - не продуктивно. Нет никакой необходимости динамически создавать свойства. Нет типизации.
Спасибо за совет. Пробовал еще до создания этой темы, но не получалось. Не мог из
Код:
var t = this.attachMovie("ball","b"+i,i+1);
сделать такое же с addChild(), ибо я так понял что по цыклу создается несколько "ball" только каждому дается имя "b"+i. Так вот думал я, искал, читал, придумал как такое сделать, но незнал правильно ли, потому что компилить не мог из-за еще ошибок. Но теперь исходя из подсказки "attachMovie() на addChild(new SomeMyMenuItem())" вижу что не то делал.

Вот что я сделал: На таймлайне пусто, в библиотеке есть мувиклип "item" которому присвоен несуществующий класс main.Item, Document class: main.Carousel.
Вот сам main.Carousel, но он сделан до той степени до какой смог:
Код:
package main{
	import flash.display.MovieClip;
	import flash.events.*;
	public class Carousel extends MovieClip{
		var numOfItems:Number = 1;
		var radiusX:Number = 250;
		var radiusY:Number = 75;
		var centerX:Number = stage.stageWidth/2;
		var centerY:Number = stage.stageHeight/2;
		var speed:Number = 0.05;
		function Carousel(){
			for (var i=0; i<numOfItems; i++){
				var t = this.addChild(new Item()); //Скорей всего это неправильно, но незнаю как правильно
				t.angle = i * ((Math.PI*2)/numOfItems);
				t.addEventListener(Event.ENTER_FRAME, mover);
			}
		}
		private function mover(){
			//Тут нечто изменил, но пока незнаю правильно ли, ибо еще не дошел. Пробовал компилить, ошибки выдает по поводу angle.
			/*this.x = Math.cos(this.angle) * radiusX + centerX;
			this.y = Math.sin(this.angle) * radiusY + centerY;
			var s = this.y /(centerY+radiusY);
			this.xscale = this.yscale = s*100;
			this.angle += this(parent).speed;
			this.swapChildrenAt(Math.round(this._xscale) + 100);*/
		}
	}
}
Ну вот, теперь все за меня делать не придется, остается только поправить.
Помогите пожалуйста разобратся.


Последний раз редактировалось N1ka; 02.07.2008 в 16:06.
Старый 02.07.2008, 14:51
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 5  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
Код:
var t = this.addChild(new Item());
не верна эта строка, я думаю вернее будет так
Код:
addChild(new Item())
правда не знаю как отреагирует флеш на то что этот класс не существует, но вроде как н автоматом создает его, просто пустой, наверное будет все норм)

Старый 02.07.2008, 15:32
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 6  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от ramshteks Посмотреть сообщение
Код:
var t = this.addChild(new Item());
не верна эта строка, я думаю вернее будет так
Код:
addChild(new Item())
правда не знаю как отреагирует флеш на то что этот класс не существует, но вроде как н автоматом создает его, просто пустой, наверное будет все норм)
Какой класс не существует?

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

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Цитата:
Сообщение от ramshteks Посмотреть сообщение
Код:
var t = this.addChild(new Item());
не верна эта строка, я думаю вернее будет так
Код:
addChild(new Item())
А как тогда t обьявить, чему должно равнятся?
Я пробовал раньше так:
Код:
var t:Item = new Item();
addChild(t);
Но у меня не компилилось потому что это несуществующий класс, да еще и подсказка wvxvw была "attachMovie() на addChild(new SomeMyMenuItem())", то я решил что мой вариант не правильный.
Цитата:
Сообщение от __etc Посмотреть сообщение
Какой класс не существует?
main.Item

Может я вообще должен Document class оставить пустым, а main.Carousel присвоить мувиклипу "item", но тогда там тоже с этим addChild незнаю как поступить. Потому не делал так, да еще и в оригинале весь код писался не на мувиклип, а в первом кадре.

Эхх, и как же мне поступить с этим addChild и переменной t? И правильно ли я присвоил классы? Не совсем понял wvxvw и ramshteks.


Последний раз редактировалось N1ka; 02.07.2008 в 16:09.
Старый 02.07.2008, 16:05
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 8  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
ну как я понял класс Item это пустой класс прилепленный к мувику...

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
нет... ты напиши сам класс Item запихни туда все обработчики событий. Как я понял Item это мувик в будущем? знач все что этот мувик сам с собой сделать может запихни в этот класс.

а создавай так:

Код:
var menuItem:Item=new Item();
addChild(menuItem);

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

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Цитата:
Сообщение от ramshteks Посмотреть сообщение
нет... ты напиши сам класс Item запихни туда все обработчики событий. Как я понял Item это мувик в будущем? знач все что этот мувик сам с собой сделать может запихни в этот класс.

а создавай так:

Код:
var menuItem:Item=new Item();
addChild(menuItem);
Ок. Так я и делал. Вот что в main.Item:
Код:
package main{
	import flash.display.MovieClip;
	public class Item extends MovieClip{
		function Item(){
			//Cоздается отражение
			masker.cacheAsBitmap = ref.cacheAsBitmap = true;
			ref.mask = masker;
		}
	}
}
Но тут в main.Carousel:
Код:
package main{
	import flash.display.MovieClip;
	import flash.events.*;
	public class Carousel extends MovieClip{
		var numOfItems:Number = 1;
		var radiusX:Number = 250;
		var radiusY:Number = 75;
		var centerX:Number = stage.stageWidth/2;
		var centerY:Number = stage.stageHeight/2;
		var speed:Number = 0.05;
		function Carousel(){
			for (var i=0; i<numOfItems; i++){
				var menuItem:Item = new Item();
				menuItem.name = "item"+i //Это чтобы было похоже на var t = this.attachMovie("ball","b"+i,i+1);, тоесть чтобы каждый item имел название +i, незнаю правильно ли
				addChild(menuItem);
				menuItem.angle = i * ((Math.PI*2)/numOfItems); //А вот тут ошибка, из-за нее я и решил обратится на форум, потому что думал что наблудил с Item и addChild. Ошибка вот такая: 1119: Access of possibly undefined property angle through a reference with static type main:Item. 
				menuItem.addEventListener(Event.ENTER_FRAME, mover);
			}
		}
		private function mover(){
			/*this.x = Math.cos(this.angle) * radiusX + centerX;
			this.y = Math.sin(this.angle) * radiusY + centerY;
			var s = this.y /(centerY+radiusY);
			this.xscale = this.yscale = s*100;
			this.angle += this(parent).speed;
			this.swapChildrenAt(Math.round(this._xscale) + 100);*/
		}
	}
}
С этого я и начинал... Как тут поступить? Может опять не так понял..

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

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

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


 


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


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