Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Сапер, проблемы с циклом, мышью. (http://www.flasher.ru/forum/showthread.php?t=185616)

says 16.10.2012 22:23

Сапер, проблемы с циклом, мышью.
 
Здравствуйте.
Пишу игру сапер :)

Пока на стадии 1-ой:)
-создаю 1 кнопочку графически(само собой указываю имя объекта)
-создаю поле 10х10 вложенным циклом for(тут первая проблема:внутренний цикл рисует мои 10 кнопочек по оси х,НО внешний цикл,созданный для перехода на следующую строку не срабатывает)
-далее я подумал,надо что бы мои кнопочки работали,я добавляю btn'у слушатель событий addEventListener(проблема номер 2 тут).

func_click вместе с слушателем событий я заккоментил,с ним программа вообще не работает.

код.

Код AS3:

package
{
        import flash.events.MouseEvent;//события мыши
        import flash.display.MovieClip;//для работы с кадрами
        import flash.display.Sprite; //для работы с основной функцией.
        //import flash.display.*;
        import flash.text.TextField;//для работы с надписями
        import flash.utils.getTimer;//время
 
                public class Saper extends Sprite {
                private var n:int= 0;//элементы в строке
                private var m:int= 0;//номер строки
                        public function Saper(){
                                for (var i:int = 0 ; i<10;i++){
                                        for(var j:int ; j<10;j++){
                                                var btn:Btn = new Btn();//присвоили переменной экземпляр
                                                addChild(btn);//добавили на сцену кнопочку
                                                n+=30;//увеличили
                                                btn.x = n;//отправляем кнопочку в координаты 30 по х в первый раз
                                                btn.y= m;//отправляем кнопочку в координаты 0 по у в первый раз
                                                //btn.addEventListener(MouseEvent.CLICK,func_click);
                                        }
                                        m+=30;
                                }
                        }
                /*function func_click (e:MouseEvent){
                        var btn:Btn = new Btn();
                        removeChild(btn);               
                }*/

                }
}


Nooob 16.10.2012 23:05

Код AS3:

for (var i:int = 0 ; i<10;i++){
  for(var j:int = 0; j<10;j++){

нужно присваивать переменной значение по умолчанию, чтобы повторно для нужных целей её использовать в следующей итерации

incvizitor 16.10.2012 23:45

Код AS3:

                                for (var i:int = 0 ; i<10;i++){
                                        n = 0; //тут так же нужно обнулять, либо у Вас строки съедут
                                        for(var j:int = 0; j<10;j++){ // Как уже писали выше
                                                var btn:Btn = new Btn();
                                                addChild(btn);
                                                n+=30;
                                                btn.x = n;
                                                btn.y= m;
                                        }
                                        m+=30;
                                }


Inet_PC 17.10.2012 09:53

Цитата:

/*function func_click (e:MouseEvent){
var btn:Btn = new Btn();
removeChild(btn);
}*/
Вы создаете кнопку и тут же пытаетесь удалить ее со сцены, это невозможно, если Вы хотели удалить кнопку ту, по которой кликнули, то это должно быть примерно так:
Код AS3:

private function func_click (e:MouseEvent):void
{
        var btn:Btn = e.currentTarget as Btn;
        if (btn)
        {
                removeChild(btn);               
        }
}


says 17.10.2012 18:51

Cпасибо,но вы не могли бы подробнее описать,мне бы понимание этой функции...
Цитата:

Код AS3:

private function func_click (e:MouseEvent):void
{
        var btn:Btn = e.currentTarget as Btn;
        if (btn)
        {
                removeChild(btn);               
        }
}


а вот тут "хороших" изменений не произошло..
Цитата:

Код AS3:

for (var i:int = 0 ; i<10;i++){
                                        n = 0; //тут так же нужно обнулять, либо у Вас строки съедут
                                        for(var j:int = 0; j<10;j++){ // Как уже писали выше
                                                var btn:Btn = new Btn();
                                                addChild(btn);
                                                n+=30;
                                                btn.x = n;
                                                btn.y= m;
                                        }
                                        m+=30;

}

says 17.10.2012 19:04

Вложений: 1
На данный момент код выглядит так:
Код AS3:

package
{
        import flash.events.MouseEvent;//события мыши
        import flash.display.MovieClip;//для работы с кадрами
        import flash.display.Sprite; //для работы с основной функцией.
        //import flash.display.*;
        import flash.text.TextField;//для работы с надписями
        import flash.utils.getTimer;//время
 
                public class Saper extends Sprite {
                private var n:int= 0;//элементы в строке
                private var m:int= 0;//номер строки
                        public function Saper(){
                                for (var i:int = 0 ; i<10;i++){
                                        n=0;
                                        for(var j:int ; j<10;j++){
                                                var btn:Btn = new Btn();//присвоили переменной экземпляр
                                                addChild(btn);//добавили на сцену кнопочку
                                                n+=30;//увеличили
                                                btn.x = n;//отправляем кнопочку в координаты 30 по х в первый раз
                                                btn.y= m;//отправляем кнопочку в координаты 0 по у в первый раз
                                                //btn.addEventListener(MouseEvent.CLICK,func_click);
                                        }
                                        m+=30;
                                }
                        }
                        private function func_click (e:MouseEvent):void{ //Нажатие по кнопочке
                        var btn:Btn = e.currentTarget as Btn;
                        if (btn) //цикл,если бтн = тру то удаляем чайлд
                                {
                                        removeChild(btn);                //удаление кнопочки
                                }
                        }
                }
}

результат плачевен:

http://www.flasher.ru/forum/newattac...anageattach&p=

maxkar 17.10.2012 19:08

Сравните:
Код AS3:

for(var j:int = 0; j<10;j++){ // Как уже писали выше
for(var j:int ; j<10;j++){ // Ваш код


says 17.10.2012 19:11

Ой,дурья моя голова))) спасибо,не заметил очевидного))) а вот по поводу этой функции кто нить максимально подробные пояснения может дать?
Код AS3:

private function func_click (e:MouseEvent):void{ //Нажатие по кнопочке
                        var btn:Btn = e.currentTarget as Btn;
                        if (btn) //цикл,если бтн = тру то удаляем чайлд
                                {
                                        removeChild(btn);                //удаление кнопочки
                                }
                        }


incvizitor 17.10.2012 19:30

Код AS3:

var btn:Btn = e.currentTarget as Btn;

Вы подписываетесь на событие MouseEvent.CLICK у баттона, обработчик этого события вызовется, когда кто то нажмет на кнопку. В обработчик будет передан объект события, у которого есть сслыка на target. target это объект который диспатчнул событие, в данном случае это объект на который нажали. так как target, это возможно не сама кнопка, а один и её детей, то мы запрашиваем currentTarget, что гарантирует нам то, что вернется именно тот объект, на событие которого мы подписались.

подробнее о фазах событий

после того, как мы получили ссылку на кнопку, мы проверяем не равна ли она null, такое значения она может получить в процессе преобразования её к классу Btn. Если она не null, то мы её удаляем.

says 17.10.2012 19:36

Цитата:

Сообщение от incvizitor (Сообщение 1100278)
Код AS3:

var btn:Btn = e.currentTarget as Btn;

Вы подписываетесь на событие MouseEvent.CLICK у баттона, обработчик этого события вызовется, когда кто то нажмет на кнопку. В обработчик будет передан объект события, у которого есть сслыка на target. target это объект который диспатчнул событие, в данном случае это объект на который нажали. так как target, это возможно не сама кнопка, а один и её детей, то мы запрашиваем currentTarget, что гарантирует нам то, что вернется именно тот объект, на событие которого мы подписались.

подробнее о фазах событий

после того, как мы получили ссылку на кнопку, мы проверяем не равна ли она null, такое значения она может получить в процессе преобразования её к классу Btn. Если она не null, то мы её удаляем.

Спасибо,знали бы вы какая это ценная информация! (не сарказм)

Добавлено через 1 час 50 минут
только функция не удаляет кнопку после нажатия :(


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

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