Суббота, 23 Ноября 2024, 03:06

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
изменить linestyle по щелчку мыши
VislouhДата: Пятница, 04 Февраля 2011, 19:44 | Сообщение # 1
частый гость
Сейчас нет на сайте
есть какие то обьекты на сцене, нам нужно чтобы они по щелчку как то выделялись, например, у того обьекта покоторому я щелкну мышью,изменится его текущий Linestyle на linestyle (2,0xff0000)
как правильно написать это,чтобы изменилось?

public function videlenie(Event:MouseEvent):void {
////////вот как я пробовал
this.cubic.graphics.lineStyle() = cubic.graphics.lineStyle(0xff0000);
////////////////еще один вариант
this.cubic.graphics.lineStyle(2, 0xff0000)
trace('работает')}

но эт не работает,я не могу сформулировать правильно,чтобы дощло до компилятора что мне нужно.


новичок в изучении actionscript 3.0
SoWaДата: Воскресенье, 06 Февраля 2011, 12:08 | Сообщение # 2
частый гость
Сейчас нет на сайте
Не, ты немного не так делаешь с самого начала smile
Смотри. Чтобы линия знала, что тыкнули на нее - надо навешать на нее обработчик:
Code

var line:%type% = new %type%();
...
line.addEventListener(MouseEvent.CLICK,videlenie);
this.addChild(line);

И вот ты создал линию, навешал на нее слушателя, добавил на сцену.
Теперь время отлавливать событие.
В функции videlenie пиши такой код:
Code

(Event.currentTarget as %type%).lineStyle(2, 0xff0000);

Где %type% - это тип переменной с которой работаешь.
Возможно, (Event.currentTarget as %type%) такое приведение типа лишнее, но береженого бог бережет.

Добавлено (06.02.2011, 12:08)
---------------------------------------------
Т.е. смотри вообще логику работы с событиями объектов:
Когда ты объект создал и навешал на него обработчик - он будет отрабатывать со событию на объекте.
Если ты хочешь в этом обработчике ченить с делать с этим объектом - используй Event.currentTarget or Event.Target
Для чего вообще были придуманы эти таргеты(цели)?
Такой пример: у тебя есть 100 экземпляров кнопки. И все на сцене. Пусть это игра Сапер. Клик на каждую кнопку не нуждается в уникальном обработчике, ведь вся информация хранится где-то в массиве.
Поэтому для всех 100 кнопок написан всего один обработчик, который с помощью Event.currentTarget узнает, на какую именно кнопку тыкнули. а потом ченить с ней делает.


ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю.
Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.


Сообщение отредактировал SoWa - Воскресенье, 06 Февраля 2011, 12:04
VislouhДата: Воскресенье, 06 Февраля 2011, 21:19 | Сообщение # 3
частый гость
Сейчас нет на сайте
package game
{
import flash.display.DisplayObject;
import flash.display.Graphics;
import flash.display.Sprite;
import game.cvadrat;
import flash.events.Event;
import flash.events.MouseEvent;

public class Cicl extends Sprite
{
public var cubic:cvadrat;

public function Cicl()
{

for (var ctolbec:int=0; ctolbec<12;ctolbec++) {
for (var rad:int=0; rad<12;rad++) {
cubic = new cvadrat();
cubic.name = String(ctolbec) + String(rad);
cubic.x = (cubic.x + cubic.width)*ctolbec;
cubic.y = (cubic.y + cubic.height)*rad;
addChild(cubic);


cubic.addEventListener(MouseEvent.CLICK, this.videlenie);
}

}


}
private function videlenie(Event:MouseEvent):void {
(Event.currentTarget as Graphics).beginFill( 0xff0000);
trace("fff");
}
}

}

ошибка. не удается вызвать обьект или свойство со ссылкой на обьект "null" то есть как это? он не находит почему то обьект для того чтобы его изменить но почему.


новичок в изучении actionscript 3.0

Сообщение отредактировал Vislouh - Воскресенье, 06 Февраля 2011, 21:50
SoWaДата: Понедельник, 07 Февраля 2011, 08:51 | Сообщение # 4
частый гость
Сейчас нет на сайте
Поставь бряк на эту строку: (Event.currentTarget as Graphics).beginFill( 0xff0000);
И посмотри, что за объект приходит в обработчик.
Я вечером сам гляну, потыкаюсь.
Можешь весь проект скинуть на мыло imtester@mail.ru ?


ActionScript-программист. Так же Flash Media Server, C#, PHP. Рисовать не умею и не люблю.
Ищу проект, желательно где есть грамотный менеджер, дизайнер и художник.
VislouhДата: Вторник, 08 Февраля 2011, 15:01 | Сообщение # 5
частый гость
Сейчас нет на сайте
в общем пришел к выводу что изменить свойства graphics через листенер невозможно. решил проблему тем что сделал отдельно обводку и по листенеру добавляю ее к уже имеющимся квадратикам. так работает, хотя и как по мне так неудобно.

Добавлено (08.02.2011, 15:01)
---------------------------------------------
SoWa,ты не смотрел еще код? я тебе отправил.в общем проблема еще и в том что мне нужно проверять на совпадение цветов.если цвет одного квадратика равен цвету другого квадратика то тогда то то и то то,а beginFill сравнить не представляется возможным


новичок в изучении actionscript 3.0
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг