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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 02.07.2008, 16:38
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 11  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

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

а еще... код вызывает сомнение :
Код:
masker.cacheAsBitmap = ref.cacheAsBitmap = true;
ref.mask = masker;
не понятно где ты обьявляешь masker'а и ref'а

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

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

а еще... код вызывает сомнение :
Код:
masker.cacheAsBitmap = ref.cacheAsBitmap = true;
ref.mask = masker;
не понятно где ты обьявляешь masker'а и ref'а
Действительно, спасибо, rotation какраз подходит.
А этот код:
Код:
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
				addChild(menuItem);
				menuItem.rotation = i * ((Math.PI*2)/numOfItems);
				menuItem.addEventListener(Event.ENTER_FRAME, mover);
			}
		}
		private function mover(){
			this.x = Math.cos(this.rotation) * radiusX + centerX;
			this.y = Math.sin(this.rotation) * radiusY + centerY;
			//var s = this.y /(centerY+radiusY); //Должно работать и без этой строки
			//this.scaleX = this.scaleY = s; //Должно работать и без этой строки
			this.rotation += this(parent).speed;
			//this.swapChildrenAt(Math.round(this.scaleX) + 100); //Должно работать и без этой строки
		}
	}
}
...но при компиляции в Output пишет:
ArgumentError: Error #1063: Argument count mismatch on main::Carousel/::mover(). Expected 0, got 1.
и не работает. В чем трабл?

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

Регистрация: Jul 2007
Сообщений: 805
Отправить сообщение для ramshteks с помощью ICQ Отправить сообщение для ramshteks с помощью Skype™
Код:
private function mover(evt:Event){
			this.x = Math.cos(this.rotation) * radiusX + centerX;
			this.y = Math.sin(this.rotation) * radiusY + centerY;
			//var s = this.y /(centerY+radiusY); //Должно работать и без этой строки
			//this.scaleX = this.scaleY = s; //Должно работать и без этой строки
			this.rotation += this(parent).speed;
			//this.swapChildrenAt(Math.round(this.scaleX) + 100); //Должно работать и без этой строки
		}
думаю так заработает)

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

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Цитата:
Сообщение от ramshteks Посмотреть сообщение
Код:
private function mover(evt:Event){
			this.x = Math.cos(this.rotation) * radiusX + centerX;
			this.y = Math.sin(this.rotation) * radiusY + centerY;
			//var s = this.y /(centerY+radiusY); //Должно работать и без этой строки
			//this.scaleX = this.scaleY = s; //Должно работать и без этой строки
			this.rotation += this(parent).speed;
			//this.swapChildrenAt(Math.round(this.scaleX) + 100); //Должно работать и без этой строки
		}
думаю так заработает)
Не заработало:
TypeError: Error #1006: value is not a function.
at main::Carousel/::mover()

Но зато на экране наконец-то появился один menuItem, такой красивый, с отражением. Ура!

ПС. А какая разница между (e:Event), (evt:Event), (event:Event)? А если нет разницы, то зачем писать "e" или "evt" или "event"?

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

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от N1ka Посмотреть сообщение
ПС. А какая разница между (e:Event), (evt:Event), (event:Event)?
Никакой.

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

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

а в карусели только создавай и аттач мувики, но не работай с событиями

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

Регистрация: Mar 2007
Адрес: Ужгород (UA)
Сообщений: 62
Цитата:
Сообщение от N1ka Посмотреть сообщение
Не заработало:
TypeError: Error #1006: value is not a function.
at main::Carousel/::mover()

Но зато на экране наконец-то появился один menuItem, такой красивый, с отражением. Ура!
Итак, дебаггер показал в какой строке ошибка и я ее ликвилировал, но...
Код:
private function mover(event:Event){
			this.x = Math.cos(this.rotation) * radiusX + centerX;
			this.y = Math.sin(this.rotation) * radiusY + centerY;
			var s = this.y /(centerY+radiusY);
			this.scaleX = this.scaleY = s;
			this.rotation += this.speed; //Тут должно быть то же что и "this.angle += this._parent.speed;", и вот ошибка была в "this.rotation += this(parent).speed;", но удалив "(parent)" все заработало, только вот незнаю хорошо ли это.
			//this.swapChildrenAt(Math.round(this.scaleX) + 100); //Пока без этого должно работать
		}
Результат радует но не очень. Все как есть работает отлично, по кругу бегает menuItem удаляясь и приближаясь, но. Именно не радует то что когда я в
Код:
var numOfItems:Number = 1;
сделал не 1 а 10 итемов:
Код:
var numOfItems:Number = 10;
то вместо десяти menuItems бегает всего лишь один, быстрее чем нужно и мало того, еще и боком, тоесть сам menuItem перекручен на несколько градусов.

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

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

Код:
function Carousel(){
var menuItemArray:Array=new Array;
			for (var i=0; i<numOfItems; i++){
				menuItemArray[i] = new Item();
				menuItemArray[i].name = "item"+i
				addChild(menuItemArray[i]);
				menuItemArray[i].rotation = i * ((Math.PI*2)/numOfItems);
				menuItemArray[i].addEventListener(Event.ENTER_FRAME, mover);
			}
		}
вот такую карусель попробуй...)

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

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

Код:
function Carousel(){
var menuItemArray:Array=new Array;
			for (var i=0; i<numOfItems; i++){
				menuItemArray[i] = new Item();
				menuItemArray[i].name = "item"+i
				addChild(menuItemArray[i]);
				menuItemArray[i].rotation = i * ((Math.PI*2)/numOfItems);
				menuItemArray[i].addEventListener(Event.ENTER_FRAME, mover);
			}
		}
вот такую карусель попробуй...)
Сделал так и вот результат:
Как я и говорил ранее "вместо десяти menuItem бегает всего лишь один, быстрее чем нужно и мало того, еще и боком, тоесть сам menuItem перекручен на несколько градусов".

Удивительно, результат тот же что и предыдущий несмотря на то что main.Carousel.as с измененным кодом я сохранил.

И еще одно наблюдение, menuItem когда бегает по кругу, он бегает не стабильно перекручена несколько градусов, а бегает по кругу и постепенно перекручивается что аж верхногами кружиться и т.д...

И еще наблюдение, что я пропустил, даже если создать один menuItem
Код:
var numOfItems:Number = 1;
он хоть и бегает по кругу с нормальной скоростью, но оказуется тоже переворачуется просто очень медленно, т.е. со временем становиться верхногами и т.д. От скорости беганья зависит скорость переворачивания, это написано у нас тут:
Код:
this.rotation += this.speed;
Смотря на эту строку можно задуматься зачем нам в карусели чтобы menuItem переворачивался? Это уже не карусель а центрифуга получается, а достижением такой цели мы не занимаемся.

Исходя из этого приходит мысль о том что старый
Код:
menuItem.angle
не равняется новому
Код:
menuItem.rotation
Значит вместо angle должно быть не rotation, а что-то другое. Что? Чем заменить в AS3 строку
Код:
menuItem.angle = i * ((Math.PI*2)/numOfItems);
или если это и в AS3 должно работать, то почему у меня не хочет. В чем ошибка?


Последний раз редактировалось N1ka; 03.07.2008 в 00:55.
Старый 03.07.2008, 01:14
ramshteks вне форума Посмотреть профиль Отправить личное сообщение для ramshteks Найти все сообщения от ramshteks
  № 20  
Ответить с цитированием
ramshteks
 
Аватар для ramshteks

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

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

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

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


 


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


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