![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Как сделать так, чтоб методы класса могли воздействовать на объекты в Main. Вот такой код у мня получился ...
Класс Button package myClasses { /** * ... * @author Scorpion */ import flash.display.*; import flash.events.*; public class Button extends MovieClip { [Embed(source="Z:/home/test1.ru/www/img/but.png")] private static const Embed: Class; public function addButton(x: int, y: int): Bitmap { var button: Bitmap; button = new Embed(); button.x = x; button.y = y; button.addEventListener(MouseEvent.CLICK, funButton); return button; } public function funButton(e:MouseEvent): void { text1.text = "Hello"; } } } package { /** * ... * @author Scorpion */ import flash.events.*; import flash.display.*; import flash.text.*; import myClasses.*; public class Main extends Sprite { public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(): void { addChild(Image.addImage(0, 0, "background")); addChild(Image.addImage(0, 0, "head")); addChild(Image.addImage(0, 200, "menuline")); var text1: TextF = new TextF; addChild(text1.addText("Text", 100, 200)); var button: Button = new Button; addChild(button.addButton(200, 200)); } } } |
|
|||||
|
listener
|
Цитата:
Нормальный выход из ситуации - заставить Main слушать события кнопки, и по событию клика выводить в text1 информацию. Вы заставляете кнопку слушать саму себя. Это само по себе не может считаться ошибкой, но мэйн ничего не будет знать о том, что происходит с кнопкой, нафик она такая кнопка, спрашивается? Тут как бы простая логика, Я, мэйн, даю пользователю кнопку, чтобы он на нее нажал, и слушаю, когда он это сделает. Чтобы отреагировать на клик соответственно логике, которую я, мэйн, знаю. Кнопка - это просто элемент интерфейса, ее задача в подавляющем большнстве случаев - уведомить родителя о том, что на нее нажали и все. Замечу, что держать всю логику приложения в одном классе Main - не самая удачная идея, если приложение не "просто поиграться с классами". Оу... кажись опять маячит на горизонте MVC ![]() |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Ну я попробовал перенести слушатель событие в Маин
var button: Button = new Button; addChild(button.addButton(200, 200)); button.addEventListener(MouseEvent.CLICK, funButton); button.funButton(e:MouseEvent); Не держать всю логику программы в Main ... эт как? |
|
|||||
|
Что это за такое?
Добавлено через 4 минуты Если вы не поняли принципы ООП, которые я вам попытался объяснять из прошлой темы про текстовое поле, объясню на этом примере. Есть у вас меню в игре. В нём содержится экземпляр класса кнопки, который вы написали для этой программы. Это уже другое приложение, поэтому здесь нет никаких текстовых полей в классе Main. А кнопка лезет в Main и пытается изменить там какое-то значение, которого даже нет. К чему это? Кнопка должна выполнять функционал кнопки. Она должна нажиматься, отжиматься и быть DisplayObjectContainer'ом. Всё. Больше ей ничего не нужно знать. Это класс Main должен знать, что должно произойти при нажатии на добавленную в него кнопку.
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Ну так тем кодом я и пытался сделать, чтоб класс знал, что должно произойти. Создал слушатель клика для объекта button из пользовательского класса Button ну и функцию, какую он вызывает, взял из того же класса. А как надо было это написать правильно?
|
|
|||||
package com.ui { /** * ... * @author Scorpion */ import flash.display.*; import flash.events.*; public class Button { [Embed(source="Z:/home/test1.ru/www/img/but.png")] private static const Embed: Class; public static function addButton(x: int, y: int): Sprite { var button: Bitmap; button = new Embed(); button.x = x; button.y = y; button.addEventListener(MouseEvent.CLICK, funButton); return (new Sprite()).addChild(button); } } } package { /** * ... * @author Scorpion */ import flash.events.*; import flash.display.*; import flash.text.*; import com.ui.*; public class Main extends Sprite { public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(): void { addChild(Image.addImage(0, 0, "background")); addChild(Image.addImage(0, 0, "head")); addChild(Image.addImage(0, 200, "menuline")); var text1: TextF = new TextF; addChild(text1.addText("Text", 100, 200)); var button:Sprite = button.addButton(200,200); addChild(button); button.addEventListener(MouseEvent.CLICK, btnClickHandler); } private function btnClickHandler(e:MouseEvent):void { ... } } }
__________________
There is no thing in this world that is not simple. |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
То есть функция, которую вызывает слушатель, обязательно должна быть в Мейне (то есть в том же файле, что и сам слушатель). И нельзя из Мейна вызвать слушателем функцию из класса?
Добавлено через 43 минуты Ну вот я переделал по вашему образцу package { /** * ... * @author Scorpion */ import flash.events.*; import flash.display.*; import flash.text.*; import myClasses.*; public class Main extends Sprite { public function Main() { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(): void { addChild(Image.addImage(0, 0, "background")); addChild(Image.addImage(0, 0, "head")); addChild(Image.addImage(0, 200, "menuline")); var text1: TextF = new TextF; addChild(text1.addText("Text", 100, 200)); var button: Sprite = Button.addButton(200, 200); addChild(button); button.addEventListener(MouseEvent.CLICK, funButton); } private function funButton(e:MouseEvent): void { text1.text = "Hello"; } } } package myClasses { /** * ... * @author Scorpion */ import flash.display.*; import flash.events.*; public class Button { [Embed(source="Z:/home/test1.ru/www/img/but.png")] private static const Embed: Class; public static function addButton(x: int, y: int): Sprite { var button: Bitmap; button = new Embed(); button.x = x; button.y = y; button.addEventListener(MouseEvent.CLICK, funButton); return (new Sprite()).addChild(button); } } } и что вообще значит это написание через точку в ретурне? Последний раз редактировалось 2misha; 03.05.2014 в 23:46. |
|
|||||
|
Регистрация: Apr 2014
Сообщений: 97
|
Где заменить?
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:54. |
|
|
« Предыдущая тема | Следующая тема » |
|
|