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

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

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

Регистрация: Mar 2015
Сообщений: 64
По умолчанию перемещение на сцене объекта Shape

Доброго времени суток.

Возникла проблема в следующем участке кода:

Код AS3:
package {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.utils.setInterval;
	import flash.display.Shape;
 
	public class Square extends Sprite{
 
		private var shape:Shape;
 
		public function Square(){
			stage.addEventListener(MouseEvent.CLICK, addShapeListener);
		}
 
		private function addShapeListener(e:MouseEvent):void{
			shape = new Shape();
			shape.graphics.lineStyle(1);
		    shape.graphics.beginFill(0x000000);
		    shape.graphics.drawRect(mouseX, mouseY, 80, 80);
			addChild(shape);
			setInterval(moveShape, 60);
 
			function moveShape(){
			    shape.x = mouseX;
			    shape.y = mouseY;
		    }
		}
 
	}
}
Проблема следующая: объект shape появляется сперва в точке положения курсора , а потом тут же смещается от курсора на расстояние равное расстоянию между точкой 0:0 сцены и точкой курсора. Я так понимаю это как-то связано с тем, что первые два параметра метода drawRest() - это положения объекта shape относительно точки привязки контейнера куда он добавляется.

А если я выбрал совсем неудачный способ перемещения объекта shape, подскажите пожалуйста что-нибудь более подходящее.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
На самом деле никуда он не смещается не так. Форма заполняется относительно неправильной точки
надо не
Код AS3:
shape.graphics.drawRect(mouseX, mouseY, 80, 80);
а
Код AS3:
shape.graphics.drawRect(0, 0, 80, 80);
И вообще setInterval() лучше не использовать. Слушатели лучше вашать явно. И этот шейп смещать либо по энтер фрейму, либо по mouseMove

Старый 29.09.2015, 09:22
бакуард вне форума Посмотреть профиль Отправить личное сообщение для бакуард Найти все сообщения от бакуард
  № 3  
Ответить с цитированием
бакуард

Регистрация: Mar 2015
Сообщений: 64
Я пробовал вариант:

Код AS3:
shape.graphics.drawRect(0, 0, 80, 80);
Но вот появляется проблема: объект shape сперва появляется в верхнем левом углу экрана, а потом резко перемещается в точку курсора. Получается неприятное глазу "дергание". Правда такое происходит только с первыми добавляемыми фигурами, а потом этот эффект пропадает и объект появляется в точке курсора.
Не пойму почему так происходит.

А насчет явного использования слушателей: мне показалось что задача слишком простая, чтобы ради неё создавать отдельный таймер явно. Вам не кажется что так этот фрагмент кода легче понять?

Добавлено через 7 минут
Насчет MOUSE_MOVE, если это то, о чем вы говорите. В дальнейшем я изменю код так, что объект будет появляться при нажатии на кнопке. Создавать слушатель CLICK для кнопки, а потом слушатель для объекта MOUSE_MOVE мне кажется неудобно.

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

Регистрация: Nov 2008
Адрес: Ukraine, Kyiv
Сообщений: 94
Отправить сообщение для ALeXVoz с помощью Skype™
Нужно поместить объект на место сразу после добавления на стейдж или перед добавлением
Код AS3:
package {
 
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.utils.setInterval;
	import flash.display.Shape;
 
	public class Square extends Sprite{
 
		private var shape:Shape;
 
		public function Square(){
			stage.addEventListener(MouseEvent.CLICK, addShapeListener);
		}
 
		private function addShapeListener(e:MouseEvent):void{
			shape = new Shape();
			shape.graphics.lineStyle(1);
		    shape.graphics.beginFill(0x000000);
		    shape.graphics.drawRect(mouseX, mouseY, 80, 80);
			moveShape(); //здесь
			addChild(shape);
			//moveShape(); или здесь.
			setInterval(moveShape, 60);
 
			function moveShape(){
			    shape.x = mouseX;
			    shape.y = mouseY;
		    }
		}
 
	}
}
Добавлено через 59 секунд
И не забывайте про .endFill();

Старый 30.09.2015, 12:56
бакуард вне форума Посмотреть профиль Отправить личное сообщение для бакуард Найти все сообщения от бакуард
  № 5  
Ответить с цитированием
бакуард

Регистрация: Mar 2015
Сообщений: 64
Насчет смещения объекта shape от курсора мыши. Проблема в этом участке кода:

Код AS3:
function moveShape(){
		shape.x = mouseX;
		shape.y = mouseY;
       }
положения курсора, значение которого сохраняется в переменных mouseX, mouseY, рассчитывается не относительно начало координат сцены, а относительно местоположения кнопки.

Подскажите пожалуйста, как сделать так, чтобы положения курсора, значение которого сохраняется в переменных mouseX, mouseY рассчитывалось относительно начала координат сцены.

Старый 30.09.2015, 13:08
ALeXVoz вне форума Посмотреть профиль Отправить личное сообщение для ALeXVoz Посетить домашнюю страницу ALeXVoz Найти все сообщения от ALeXVoz
  № 6  
Ответить с цитированием
ALeXVoz
 
Аватар для ALeXVoz

Регистрация: Nov 2008
Адрес: Ukraine, Kyiv
Сообщений: 94
Отправить сообщение для ALeXVoz с помощью Skype™
Код AS3:
function moveShape(){
		shape.x = stage.mouseX;
		shape.y = stage.mouseY;
}
зависит от структуры объектов. возможно надо перевести локальные координаты в глобальные или наоборот. localToGlobal, globalToLocal

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

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

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


 


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


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