Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Drag&n&Drop (http://www.flasher.ru/forum/showthread.php?t=113700)

Nastardimus 06.07.2008 12:35

Drag&n&Drop
 
Код:

package main {
        import flash.display.MovieClip;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.display.Sprite;

        public class myButton extends MovieClip {
                public function myButton () {
                        addEventListener (MouseEvent.CLICK, onClick);
                        addEventListener (MouseEvent.CLICK, onClic);
                }
                function onClick(event:MouseEvent):void {
                        startDrag (myButton);
                }
                function onClic (event:MouseEvent):void {
                        stopDrag (myButton);
                }
        }
}

Есть кнопка, надо написать драг и дроп для неё, у меня получается как-то так, но это не работает. Точнее есть убрать функцию onClic то старт драг работать будет. А так не работает, я AS3.0 знаю очень плохо, Как это написать правильно ?

iNils 06.07.2008 13:01

Для оформления своего кода надо использовать теги [code][/code].

ramshteks 06.07.2008 13:35

Код:

addEventListener (MouseEvent.CLICK, onClick);
addEventListener (MouseEvent.CLICK, onClic);

замени на

Код:

addEventListener (MouseEvent.MOUSE_DOWN, onClick);
                        addEventListener (MouseEvent.MOUSE_UP, onClic);


Nastardimus 06.07.2008 13:43

Цитата:

Сообщение от ramshteks (Сообщение 750375)
Код:

addEventListener (MouseEvent.CLICK, onClick);
addEventListener (MouseEvent.CLICK, onClic);

замени на

Код:

addEventListener (MouseEvent.MOUSE_DOWN, onClick);
                        addEventListener (MouseEvent.MOUSE_UP, onClic);


Пробовал, вот такую ошибку выдаёт.
1137: Incorrect number of arguments. Expected no more than 0.

ramshteks 06.07.2008 13:49

Код:

package main {
        import flash.display.*;
        import flash.events.*;
       

        public class myButton extends MovieClip {
                public function myButton () {
                        addEventListener (MouseEvent.MOUSE_DOWN, onMouseDownEvent);
                        addEventListener (MouseEvent.MOUSE_UP,onMouseUpEvent;
                }
                private function onMouseDownEvent(event:MouseEvent):void {
                        event.target.startDrag ();
                }
                private function onMouseUpEvent(event:MouseEvent):void {
                        event.target.stopDrag ();
                }
        }
}

извиняюсь первый раз не увидел ошибки с стартДраг. Надо смотреть спецификацию метода прежде чем его использовать!

Nastardimus 06.07.2008 13:56

В таком случае ошибка такая.
Код:

ReferenceError: Error #1069: Property startDrag not found on flash.display.SimpleButton and there is no default value.
        at main::myButton/::onMouseDownEvent()


ramshteks 06.07.2008 13:59

Код:

event.target.
попробуй заменить на myButton... но лучше на this

Nastardimus 06.07.2008 14:01

Цитата:

Сообщение от ramshteks (Сообщение 750385)
Код:

event.target.
попробуй заменить на myButton... но лучше на this

Да с this уже сам написал, спасибо огромное за помощь.

ramshteks 06.07.2008 14:04

Цитата:

Да с this уже сам написал, спасибо огромное за помощь.
можешь попробовать и без зис, думаю тоже будет работать

BlooDHounD 06.07.2008 16:09

в хелпе кажется чётко написано, что startDrag есть только у наследников Sprite. разве SimpleButton таковым является?

Сайлас 06.07.2008 16:32

Ну насколько я понял там есть myButton - наследник MC, в котором положен SimpleButton. И конечно event.target был тот самый симплбаттон :) А this спасло потому, что this - это myButton

Nastardimus 06.07.2008 18:07

Спасибо, за разъяснения, темы плодить не буду, посиму вопрос сюда, а как к примеру посчитать перекрывание двух кнопок (есть у меня к примеру, ведро и фрукты, я перетаскиваю один фрукт в ведро, и счётчик на ведре с 0 становится 1.
Так вот вопрос, как считать перекрывание? есть какая-нибудь готовая функция?

ramshteks 06.07.2008 20:26

есть старая hitTest
щас вроде hitTestObject
но как мне кажется это не лучший подход

etc 06.07.2008 20:30

getObjectsUnderPoint

Nastardimus 06.07.2008 20:36

Хм я пробовал тестить так:
Код:

  public function score() {
                var z:int;
                var h:int;
                this.y=h;
                this.x=z;
                 
                  if (z < 150)
                  {
                          trace("Apple one");
                var txt:TextField = new TextField();
                txt.text = "Apple one";
                addChild(txt);
                  }
               
                }

Ведь правильно, что если объект будет ниже чем на 150 по y , то должен писаться текст? только вот он что-то не пишется.

ramshteks 06.07.2008 20:36

ооо... наверно здоровский метод... беру себе на заметку)

ramshteks 06.07.2008 20:38

Цитата:

Ведь правильно, что если объект будет ниже чем на 150 по y , то должен писаться текст? только вот он что-то не пишется.
а ты вот что то смотрю не инициализировал z

Nastardimus 06.07.2008 20:47

Цитата:

Сообщение от ramshteks (Сообщение 750437)
а ты вот что то смотрю не инициализировал z

всмысле написать
Код:

var z:int = this.x;
?

Off-topic:
Стукни в аську пожалуйста. я тебе в ЛС скинул.


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

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