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

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

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

Регистрация: Dec 2012
Сообщений: 28
По умолчанию Рисование в области по нажатию

В небольшой задаче требуется модифицировать кнопки для создания линий с кистью формы круга и прямоугольника. По нажатию той или иной происходит смена кистей рисования в рабочей области. Но получается интересно: рисование происходит сразу по нажатию, "из кнопки". Относительно кода, ошибок нет, если не брать логических. Как можно решить эту проблему?
Вложения
Тип файла: rar 4.rar (26.1 Кб, 69 просмотров)

Старый 21.02.2013, 12:11
yasha005 вне форума Посмотреть профиль Отправить личное сообщение для yasha005 Найти все сообщения от yasha005
  № 2  
Ответить с цитированием
yasha005
[+1 16.03.13]
[+1 22.03.13]

Регистрация: Dec 2012
Сообщений: 100
в первую очередь нужно весь код вынести в отдельный as файл, а не только фигуры прямоугольника и эллипса, а то ведь не у всех есть CS5.5, у кого-то, например (как у меня) установлен CS4

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

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
yasha005, если у вас не открывается, то скажите про это. Но не советуйте "в первую очередь нужно весь код вынести в отдельный as файл", так как это не помощь в решении задачи.

Ksenya23, очевидно ошибка с событиями и логикой. Объясните подробнее, что вы пытаетесь сделать.

P.S. Для "рисовалки" как-то странно использовать кучу мувиклипов:
Код AS3:
public class Rect extends MovieClip
Ведь можно просто в MovieClip.graphics рисовать фигуры.

Посмотрел внимательнее. Думаю, что вам стоит завести переменную, которая будет хранить значение того, какую кисть использовать. Кликнули на одну кнопку — переменная приняла значение "rect" (например), кликнули на другую — значение "ellipse". Соответственно, когда зажимаем мышь на области рисования, то смотрим, какой значение у этой переменной, и, соответственно, знаем, какую фигуру рисовать.

Относительно событий — вы замешали в одну "кучу" и клики на кнопках и рисование. По-идее, клик по кнопке — выбор кисти. Клик на области рисования (точнее зажатие мыши) — вот тогда и слушаем MOUSE_MOVE и рисуем.
__________________
hauts.ru

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

Регистрация: Dec 2012
Сообщений: 28
Hauts, сейчас попробую обдумать, спасибо.
yasha005, код с основного файла кинула в блокнот. Учту в дальнейшем
Вложения
Тип файла: txt draw.txt (1.2 Кб, 64 просмотров)

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

Регистрация: Dec 2012
Сообщений: 28
Изменила код, ругается на кнопки:
Код AS3:
var color:Number;
var shapeType:String = "ellipse";
//stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
//stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
 
stage.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
stage.addEventListener(MouseEvent.MOUSE_UP, stopDrawing);
stage.addEventListener(MouseEvent.CLICK, keyDownHandler );
 
function startDrawing(e:MouseEvent):void {
	stage.addEventListener(MouseEvent.MOUSE_MOVE, makeShapes);
	color = Math.random() * 0xFFFFFF;
}
 
function stopDrawing(e:MouseEvent):void {
	stage.removeEventListener(MouseEvent.MOUSE_MOVE, makeShapes)
}
/*function startDrawing(e:MouseEvent):void {
stage.addEventListener(MouseEvent.MOUSE_MOVE, makeShapesEllipse);
stage.addEventListener(MouseEvent.MOUSE_MOVE, makeShapesRect);
color = Math.random() * 0xFFFFFF;}
 
function stopDrawing(e:MouseEvent):void {
stage.removeEventListener(MouseEvent.MOUSE_MOVE, makeShapesEllipse);
stage.removeEventListener(MouseEvent.MOUSE_MOVE, makeShapesRect);}*/
function keyDownHandler(e:MouseEvent):void {
	if (ellipse_btn.onPress) {
		shapeType = "ellipse";
	} else if (rect_btn.onPress) {
		shapeType = "rectangle";
	}
}
/*function makeShapesEllipse(e:MouseEvent):void{
var ellipse:Ellipse = new Ellipse(10, 10, color);
addChild(ellipse);
ellipse.x = mouseX;
ellipse.y = mouseY;
}*/
 
//ellipse_btn.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
//rect_btn.addEventListener(MouseEvent.MOUSE_DOWN, startDrawing);
 
/*function makeShapesRect(e:MouseEvent):void {
var rect:Rect = new Rect(10, 10, color);
addChild(rect);
rect.x = mouseX;
rect.y = mouseY;}*/
function makeShapes(e:MouseEvent):void {
	if(shapeType == "ellipse") {
		var ellipse:Ellipse = new Ellipse(10, 10, color);
		addChild(ellipse);
		ellipse.x = mouseX;
		ellipse.y = mouseY;
	}else if (shapeType == "rectangle") {
		var rectangle:Rect = new Rect(5, 15, color);
		addChild(rectangle);
		rectangle.x = mouseX;
		rectangle.y = mouseY;
	}
}
что не так, не пойму? не правильное употребление?

Старый 21.02.2013, 14:15
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 6  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Изменила код, ругается на кнопки:
Возьмите за правило приводить код ошибки.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.02.2013, 14:30
Ksenya23 вне форума Посмотреть профиль Отправить личное сообщение для Ksenya23 Найти все сообщения от Ksenya23
  № 7  
Ответить с цитированием
Ksenya23

Регистрация: Dec 2012
Сообщений: 28
Спасибо, учту..Вот например в моем случае:
Scene 1, слой "actions", кадр 1, строка 27 1119: Обращение возможного неопределенного свойства onPress через ссылку со статическим типом flash.display:SimpleButton .
Scene 1, слой "actions", кадр 1, строка 29 1119: Обращение возможного неопределенного свойства onPress через ссылку со статическим типом flash.display:SimpleButton .
___
Не нахожу на сайте конструкции с использованием условия if-else для двух кнопок в одной функции, а хотелось бы. Нашла только: button.onPress = function():Void { trace("Кнопка нажата"); }..Придется разбить функцию с ошибками на 2..наверное, или есть этому более разумное решение?

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код AS3:
import flash.events.MouseEvent;
 
addEventListener(MouseEvent.MOUSE_DOWN, clickManager );
addEventListener(MouseEvent.MOUSE_UP, clickManager );
 
var shapeType:String = 'ellipse';
 
work_place.mouseChildren = false; // контейнер для рисования
 
function clickManager(e:MouseEvent):void {
 
	switch (e.target.name) {
		case 'ellipse_btn': shapeType = 'ellipse'; break;
		case 'rect_btn': shapeType = 'rectangle'; break;
		case 'work_place': (e.type=='mouseDown') ? addEventListener(MouseEvent.MOUSE_MOVE, makeShapes) 
												: removeEventListener(MouseEvent.MOUSE_MOVE, makeShapes); 
		break;
		default: trace('unregister target object');
	}
}
 
function makeShapes(e:MouseEvent):void {
 
	var color:uint = Math.random() * 0xFFFFFF;
 
	var shape:*;
 
	switch (shapeType) {
 
		case "ellipse": {
			shape = new Ellipse(10, 10, color);
		} break;
 
		case "rectangle": {
			shape = new Rect(5, 15, color);
		} break;
 
		default: return void;
	}
 
	work_place.addChild(shape);
 
	shape.x = mouseX;
	shape.y = mouseY;
	shape.cacheAsBitmap = true;
}
Добавлено через 3 минуты
Набросал очень быстро потому возможно нужно заменить
Код AS3:
case 'work_place':
на
Код AS3:
default:
__________________
return this...


Последний раз редактировалось AlexCooper; 21.02.2013 в 14:57.
Старый 21.02.2013, 14:53
Ksenya23 вне форума Посмотреть профиль Отправить личное сообщение для Ksenya23 Найти все сообщения от Ksenya23
  № 9  
Ответить с цитированием
Ksenya23

Регистрация: Dec 2012
Сообщений: 28
AlexCooper, не получилось..
Scene 1, слой "actions", кадр 1, строка 26 1120: Обращение несуществующего свойства work_place.
затем, при замене work_place на stage: мигает и не выдает ошибок никаких, где-то произошел конфликт

Ругается на work_place именно) тоже самое
замена на stage избегает ошибок, но не конфликта(

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Код AS3:
import flash.events.MouseEvent;
 
addEventListener(MouseEvent.MOUSE_DOWN, clickManager );
addEventListener(MouseEvent.MOUSE_UP, clickManager );
 
var shapeType:String = 'ellipse';
var color:uint;
 
function clickManager(e:MouseEvent):void {
 
	switch (e.target.name) {
		case 'ellipse_btn': shapeType = 'ellipse'; break;
		case 'rect_btn': shapeType = 'rectangle'; break;
		default: {
 
		color:uint = Math.random() * 0xFFFFFF;
 
		if (e.type=='mouseDown') 
			addEventListener(MouseEvent.MOUSE_MOVE, makeShapes) 
		else
			removeEventListener(MouseEvent.MOUSE_MOVE, makeShapes); 
		} break;
	}
}
 
function makeShapes(e:MouseEvent):void {
 
	var shape:*;
 
	switch (shapeType) {
 
		case "ellipse": {
			shape = new Ellipse(10, 10, color);
		} break;
 
		case "rectangle": {
			shape = new Rect(5, 15, color);
		} break;
 
		default: return void;
	}
 
	addChild(shape);
 
	shape.x = mouseX;
	shape.y = mouseY;
	shape.cacheAsBitmap = true;
}
__________________
return this...

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

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

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


 


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


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