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

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

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
такой код не понизит FPS?
Нет
Цитата:
Так изначально и делал а потом столкнулся с проблемой как определить на ком щелкнули, потому что e.target.... и так далее не дала результата
Показывайте свой код, где добавляется слушатель CLICK, где проверяете e.target. Это дает результат, если правильно реализовано, но не видя кода, трудно что-либо дельное посоветовать
__________________
Ко мне можно и нужно обращаться на ты)

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

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
Сообщение от Rivexe Посмотреть сообщение
Скорее всего будет проще, если вы скинете небольшой исходник по которму можно будет уже более подробно разобраться и потыкать что у вас получилось.
Вот код, для любителей поприкалываться и покритиковать скажу что за три дня код превратился в полное г...но. Обьективную критику конечно же приму.
вот первый класс
Код AS3:
package Cirk_Utility 
{
	import flash.display.Shape;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.text.engine.*;
	import flash.text.*;
	import My_Utility.Cirk2;
 
	/**
	 * ...
	 * @author @PsYcHoTeChNiCk
	 */
	public class Elemet extends Sprite 
	{
		private var Face: Shape;  // рисунок
		public var front_level: Number; // это служебная перменная на далекое будущее не суть важна
		private var colors: uint;
		public var Moving: Boolean = false;
		public var anglerot: Number = 0; // поворот задается позднее
		private var spinout: Number = 0; // текущий угол поворота
		private var LRDirect: Number; // направление движение
		private var scale_arr: Array = new Array(1, 0.75, 0.5, 0.5, 0.75); // это временно для визуального 
		private var levels: Array = new Array(0,1,2,3,4); //                    слежения
		private var place: Array = new Array(0, 1, 2, -2, -1); //пришлось сделать чтобы определять направление движения 
		private var thisplace: Number; //собственно тоже самое только для 1 экземпляра
		private var float: Number = 0; // что-то вроде счетчика как в for i
		public var SetCtrl: Cirk2; //это я уже перекличку устроил
		private var Ctrl: Number //вывод локали
		public function Elemet(color: Number) 
		{
			super();
			if (color == 0) {
				colors = 0x0000ff;
			}
			if (color == 1) {
				colors = 0x00ff00;
			}
			if (color == 2) {
				colors = 0xff0000;
			}
			if (color == 3) {
				colors = 0x00ffff;
			}
			if (color == 4) {
				colors = 0xff00ff;
			}
			spinout = color * 72; //распределям позиции при указании примечание: 72=360 / 5;
			Ctrl = color; // см выше
			thisplace = place[color]; позиция для передачи
// дальше рисуем
			Face = new Shape();
			Face.graphics.lineStyle(5, colors);
			Face.graphics.beginFill(colors, 0.5);
			Face.graphics.drawCircle(0, 0, 50);
			addChild(Face);
// закончили малевание
 
//задаем позицию
			this.x = 200 * Math.sin((spinout * Math.PI) / 180);
			this.y = (200 * Math.cos((anglerot*0 * Math.PI) / 180))/5;
			this.MyScale(scale_arr[color]);
			this.front_level = levels[color];
			addEventListener(MouseEvent.CLICK, onClick); 
			addEventListener(Event.ENTER_FRAME, onFrame);
		}
/че делаем при клике ниже
		private function onClick(e:MouseEvent): void {
			Moving = true;// разрешаем движение
			anglerot = thisplace * 72; //узнаем сколько нужно пройти с + и -
			if (thisplace != 0) { //если на первом месте нам не нужно ничего двигать
				if (thisplace > 0) { /двигаемся вправо или влево
					LRDirect = 1;
				}else {
					LRDirect = 0;
				}
			}
			SetCtrl.controlRoll = Ctrl; // а это собственно перекличка
 
		}
		public function MyScale(i: Number):void { // тут понятно думаю
			this.scaleX = i;
			this.scaleY = i;
		}
// далее собственно движение 
		private function onFrame(e:Event):void {
			if (Moving) { //если разрешено двигаться двигаемся.
 
				if (LRDirect == 0) { //если вправо значит будем прибавлять
					if (float != anglerot) { // тут счетчик сравниваем соответствует ли расстоянию
 
						spinout += 1;
						float -= 1;
					}else {// если путь пройден запрещаем двигаться и сбрасывам счетчик чтобы можно было двигаться много раз
						Moving = false;
						float = 0;
					}
 
				}else { // все тоже только для другого направления
					if (float != anglerot) {
 
						spinout -= 1;
						float += 1;
 
					}else {
						Moving = false;
						float = 0;
					}
				}
 
			}
 
собственно двигаемся
			this.x = 200 * Math.sin((spinout * Math.PI) / 180);
			this.y = (200 * Math.cos((spinout * Math.PI)  / 180)) / 5;
 
		}
	}
 
}
вот второй который все создает и наверно портит

Код AS3:
package My_Utility 
{
	import Cirk_Utility.Elemet;
	import Cirk_Utility.Platforma;
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
	import flash.text.engine.*;
	import flash.text.*;
 
	/**
	 * ...
	 * @author @PsYcHoTeChNiCk
	 */
	public class Cirk2 extends Sprite 
	{
		private var ikon: Elemet;
		private var plat_form: Platforma;
		private var  outstr: TextField;
		private var arr_icon: Array = new Array();
		private var scale_arr: Array = new Array(1, 0.75, 0.5, 0.5, 0.75);
		private var levels: Array = new Array(0, 1, 4, 3, 2);
		public var controlRoll: Number;
 
		public function Cirk2() 
		{
			super();
 
			outstr = new TextField();
			outstr.background = false;
			outstr.text = " ";
			outstr.visible = true;
			outstr.x = 0;
			outstr.y = -200;
			outstr.textColor = 0xffffff;
			outstr.autoSize = TextFieldAutoSize.CENTER;
			addChild(outstr);
 
			for (var i: int = 0; i < 5; i++) {
				var label: Elemet = new Elemet(i);
 
				arr_icon.push(label);
				addChild(arr_icon[i]);
 
			}
 
			addEventListener(Event.ENTER_FRAME, onFrame);
 
		}
 
		private function onFrame(e: Event):void {
 
			if (arr_icon[controlRoll].Moving) {
 
				arr_icon[0].Moving = arr_icon[controlRoll].Moving; 
				arr_icon[1].Moving = arr_icon[controlRoll].Moving; 
				arr_icon[2].Moving = arr_icon[controlRoll].Moving; 
				arr_icon[3].Moving = arr_icon[controlRoll].Moving; 
				arr_icon[4].Moving = arr_icon[controlRoll].Moving;
				arr_icon[0].LRDirect = arr_icon[controlRoll].LRDirect; 
				arr_icon[1].LRDirect = arr_icon[controlRoll].LRDirect; 
				arr_icon[2].LRDirect = arr_icon[controlRoll].LRDirect; 
				arr_icon[3].LRDirect = arr_icon[controlRoll].LRDirect; 
				arr_icon[4].LRDirect = arr_icon[controlRoll].LRDirect;
				arr_icon[0].anglerot = arr_icon[controlRoll].anglerot; 
				arr_icon[1].anglerot = arr_icon[controlRoll].anglerot; 
				arr_icon[2].anglerot = arr_icon[controlRoll].anglerot; 
				arr_icon[3].anglerot = arr_icon[controlRoll].anglerot; 
				arr_icon[4].anglerot = arr_icon[controlRoll].anglerot;
 
			}else {
				arr_icon[0].Moving = false; 
				arr_icon[1].Moving = false; 
				arr_icon[2].Moving = false; 
				arr_icon[3].Moving = false; 
				arr_icon[4].Moving = false;
			}
 
 
		}
	}
 
}
добавил комменты в первый класс второй мне кажется прозрачен и без коментов.

Добавлено через 3 минуты
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Нет

Показывайте свой код, где добавляется слушатель CLICK, где проверяете e.target. Это дает результат, если правильно реализовано, но не видя кода, трудно что-либо дельное посоветовать
ну свой вариант уже не хочу обратно все портить выше выложил что щас есть. Мне просто интересно как бы вы повесили клик о котором сами говорили. пример кода можно не морочиться с начинкой. поминимум чтобы было понятно.

Добавлено через 15 часов 29 минут
И тишина... неужели такая сложная задача заставить двигаться одновременно несколько копий одного объекта.

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

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

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


 


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


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