Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Статьи (http://www.flasher.ru/forum/forumdisplay.php?f=101)
-   -   ActionScript 3 с нуля (http://www.flasher.ru/forum/showthread.php?t=92301)

etc 28.08.2007 12:23

Гм, я, кажется, по-русски написал, что и куда :D

DRAGOnoid 28.08.2007 12:46

просто не совсем понял каких именно компонентов CS3 в какую либу?
Для меня понятие либа - (от англ слова library - библиотека) больше направляет на то, что вызывается внутри редактора сочетанием Ctrl+L. Но тут, я так понимаю имеются в виду *.as файлы, лежащие в какой-то папке, которые нужно скопировать куда-то. Вот я и хочу уточнить что и куда. А что касается сочетания "компоненты CS3" так тут вообще можно подразумевать что угодно :(. Это ж пост "Action Script 3 с нуля" тут не всем привычны и понятны такие "страшные слова" =). И я не исключение. Уж простите.

etc 28.08.2007 12:54

Нет, имеется ввиду именно библиотека Flash CS3-документа. А компоненты — это то, что открывается по Ctrl+F7 (Cmd+F7 на маке).

DRAGOnoid 28.08.2007 13:16

ясно - спасибо. Это кстати ответило на мой вопрос почему у меня в кое-каком месте сработал focus, я ещё подумал глюк какой.

DRAGOnoid 19.09.2007 00:15

есть событие MouseEvent.MOUSE_WHEEL которое позволяет отследить кручение колёсика мышки. А как отследить клик колёсика? Если такое вообще реально?

etc 19.09.2007 00:21

Это CLICK или MOUSE_DOWN.

DRAGOnoid 19.09.2007 00:24

__etc ты когда нить спишь? =)
Не, ни CLICK ни MOUSE_DOWN не помогли - они срабатывают только при обычном клике левой клавиши мыши. Ну или я что то упустил.

etc 19.09.2007 01:09

Попробуй KEY_DOWN тогда. Теоретически это отловить можно, например, в том же AS1/AS2 можно.

DRAGOnoid 19.09.2007 01:45

да как раз про это читал.... в этом топике

делаю просто
Код:

...
{
stage.focus = this;
stage.addEventListener(KeyboardEvent.KEY_DOWN, k);
}
private function k (event:KeyboardEvent):void {
trace ("!"+event.keyCode);
}

и заметил такую багу, не все клавиши даже на клавиатуре срабатывают
точнее сказать почти редко какие вообще срабатывают. Я думаю это уже где то было подобное. Что я упустил?

etc 19.09.2007 02:02

Наверное только то, что лучше тестировать не в IDE, а просто в плеере.

DRAGOnoid 19.09.2007 02:10

Цитата:

Сообщение от __etc
Наверное только то, что лучше тестировать не в IDE, а просто в плеере.

мда - будем ждать 10й не глючной версии IDE =)
а то без него с трейсом полный облом.

в общем клавиши заработали а вот мышку пока так и не поймал :o

хотя по логике должно было вернуть код клавиш что то типа 1, 2, 4

etc 19.09.2007 02:13

В IDE надо отключать Keyboard Shortcuts.

DRAGOnoid 19.09.2007 02:33

как я понял для ловли мыши требуется недокументированная возможность ASnative, как её включить в AS3 я так и не понял. Зато понял что даже если и включить - есть вероятность что с выходом 10го плеера она будет неработать.

короче по ходу придётся забить. А жаль! Обычное колесо мало.
а возможности юзать мыш по пальцам перечесть
Click
DoubleClick
Ctrl+Click
ALT+Click
SHIFT+Click
Ctrl+Alt+Click
(ALT+SHIFT и Ctrl+Shift не хочу рисковать с глюком раскладки клавиатуры)

маловато будет =)

BlooDHounD 19.09.2007 12:55

а у меня 3 руки и на каждой по 7 пальцев. я вообще не могу работать на стандартных мышках. мне на заказ делают специальные мышки с 45 кнопками.

совет такой: не стоит пытаться эмуливать кнопки мыши, которых может не быть у всех пользователей.
да вообще не забывай про людей, которые вообще не знают зачем им нужна клава. казуальней надо быть.

etc 19.09.2007 13:06

Это, сложно представить мышку, у которой нету третьей кнопки. :)

DRAGOnoid 19.09.2007 14:42

да то что есть мышки с 20ю кнопками это понятно - и к тому же для них свои драйвера есть и вообще можно задействовать любое сочетание клавиш... это удобно в играх использовать когда порой даже всей клавиатуры не хватает....

что касается моей проблемы - хочу игру создать, как правило в современных играх написанных на языках высокого уровня помимо клавиатуры используют мыш с двумя а то и тремя кнопками...

например уже как то в привычку вошло управлять 3D камерой через левую и правую кнопку мыши.

управлять объектами не твойным а одинарным кликом, а свойства смотреть через правую клавишу..
побочные свойства используются клавишами CTRL ALT SHIFT.
А во флеше получается кроме левой клавиши то и нет то ничего..

кстати ещё почему плохо задействовать клавиатуру - например стоит задача сделать игру на КПК - а там мягко говоря не удобно будет играть в такую без клавы....

вот и получается что круг возможностей сократился до минимума этак 6 операций с мышью =(

и то это неудобно! (надеюсь таки позволят в будущем во флеше использовать правую клавишу мыши)

Kikasso 19.09.2007 15:13

Цитата:

Сообщение от __etc
Это, сложно представить мышку, у которой нету третьей кнопки. :)

Есть такая красная пимпочка на ноутах. Да и на тачпаде у меня нет.

BlooDHounD 19.09.2007 16:48

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

клава и все кнопки мышки, кроме левой - всего ли ш добавачный инструмент для хардкорщиков.

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

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

даже в современных 3д шутарах можно настроить всё таким образом что бы управление было только мышкой. даже движение перса.

DRAGOnoid 19.09.2007 19:31

шутеры на КПК вообще чит. По сути от шутеров много ненадо - только стрелки вперёд назад влево вправо и левая клавиша. оружие переключать каким нить табом , с альтернативным огнём только сложности будут без правой кнопки мыши то, а если поставить двойной клик сам понимаешь что получится.

а ещё хуже со стратегиями , а ещё хуже с 3D стратегиями =)
а вообще хуже всего с 3D MMORPG - где одних скилов штук 20 и оружий 50 )
и как это всё мышкой управлять (у которой только одна левая клавиша? =)

BlooDHounD 19.09.2007 22:14

причём тут КПК? я вообще про разработку приложений.

ты внимательно читал мой пост?

главное то, все навароты дополнтельны. я когда играю, я использую почти всю клаву, и только 2 кнопки мыши. среднию, икогда и низачто не настрою для действий. неудобно.

нада давать пользователю свободу. а обязывать его использовать больше чем позволяет стилос - неэтично и экономически не выгодно.

DRAGOnoid 20.09.2007 10:44

о том и реч. Я говорю что тоже с тобой согласен, что в других приложениях всё гораздо проще и как ты сам говоришь удобно использовать клаву и 2 кнопки мыши. А на счёт КПК я имел ввиду что там так дело не прокатит. Я же не на С++ разрабатываю а на флеше - ведь так? Вот и получается что так же круто как везде - технически не получится круто сделать у себя :(

ладно от темы что то как то ушли =) попробую что нить сделать сначала а потом думать. А пока вопросов не имею - спасибо за советы :)

BlooDHounD 20.09.2007 13:41

я говорю о том что прикручивать кнопки это дело 3е. сперва надо сделать что бы функционировало всё с мышкой/стилосом/точпадом и одной левой кнопкой.

riden 21.09.2007 00:24

Цитата:

А как отследить клик колёсика? Если такое вообще реально?
Вообще то есть кое-какой способ реализации обработки нажатия третьей кнопки мыши и правой кнопки мыши в AS3.
В AS3 мувик грузится AVM1 (мувик с AS2 кодом) - RightClickAVM1.swf.
RightClickAVM1.swf содержит код на AS2:
Код:

//псевдо-код
var bd:BitmapData = new BitmapData(1,1,false,0xF);
{добавляем bd на сцену}
for(var i:int=0;i<n;i+=1){
if(Key.isDown(i)){ меняем цвет bd на 0xi }
}

В AS3 мувике - допустим следующий код:
Цитата:

//псевдо-код
loader.load(RightClickAVM1.swf);//AVM1
...................................................
var avm1:AVM1Movie = loader.content;
var bd:BitmapData = new BitmapData();
bd.draw(avm1);//перерисовка работает мгновенно, ибо BitmapData перерисовывает BitmapDat-у
..........................
анализируем цвет bd и узнаем какая клавиша была нажата
...........................
Я то это не пробывал. Но думаю работает.
У меня есть подозрения, что класс Key в AS2 может слушать любые устройства ввода (джойстики). Ведь он слушает все клавиши мыши.
Никто не пробовал (джойстики)? //обратите внимание Key.isDown(i) - читает все, а Key.getCode() - возвращает только клавиши клавиатуры (и то не все).

etc 21.09.2007 00:36

riden, мегакод, но, как бы, есть нечто получше. Правда, не совсем то, но из этой же оперы.

riden 21.09.2007 01:56

Не, я пишу про правую клавишу мыши и клик колесика в AS3.
Можно вместо этого
Код:

for(var i:int=0;i<n;i+=1){
if(Key.isDown(i)){ меняем цвет bd на 0xi }
}

вот это:
Код:

//псевдо-код
if(Key.isDown(2)){меняем цвет bd на 0x2//правая кнопка}
if(Key.isDown(4)){меняем цвет bd на 0x4//средняя кнопка}
}

А for я привел, так как считаю, что возможно Key слушает джойстики тоже. //проверить немогу

etc 21.09.2007 02:01

Я имел ввиду, что делать битмап и определять цвет клипа — изврат. Есть же нормальный вариант с LocalConnection и без необходимости загрузки swf извне, я его привел.

DRAGOnoid 24.09.2007 17:47

возник ещё вопрос из ряда "на засыпку".
Допустим мы программно что-то рисуем, создаём класс Sprite или класс унаследованный от него.
например
this.menuWindow = new MenuWindow();
затем мы добавляем его на сцену
addChild(this.menuWindow);

Чтобы удалить дисплей объект мы используем removeChild. В этом случае у нас удаляеттся только вид объекта но не сам объект. Это хорошо. Но у нас остался тот же visible=false. Который действует почти так же.
Вот и спрашивается в каких случаях лучше использовать removeChild а в каких visible=false, в чём их разница, и что вообще можете посоветовать по этому поводу?

DRAGOnoid 24.09.2007 17:54

блин сам подумал и понял одну вещь =]
при removeChild - не будет доступов типа parent. =]

но всёравно хотел бы ещё ваши мнения послушать

BlooDHounD 24.09.2007 18:20

Работа с объектом при visible=false остаётся точно такой же. граници родителя считаются с учём клипа и т.д. при visible=false объект остётся дитём парента и учавствует во всех операциях, а так же, если надо постоянно показывать и прятать предмет, лучше использовать visible=false, так как это быстрее.

DRAGOnoid 24.09.2007 19:38

спасибо =)

DRAGOnoid 04.10.2007 12:52

подскажите пожалуйста такой момент.
У меня на главной сцене есть несколько предметов, им даны разные имена.
Я гружу XML в котором содержатся эти имена (таким образом нахожу для кода нужные предметы)

но бывает либо опечатка редактора либо просто звёзды не так встали и в XML кто то написал название несуществующего предмета.

короче возникает ошибка
ReferenceError: Error #1069: Property ovoshi3 not found on kitchen and there is no default value.

как мне проверить существует ли такой предмет по имени?
я делаю это так - но почему то не срабатывает
Код:

for each (var item in xml.items.children()) {
if (this[item.name()]!=null)
trace (this[item.name()]);
}


etc 04.10.2007 12:53

hasOwnProperty

DRAGOnoid 04.10.2007 13:29

спасибо!!! *__*

DRAGOnoid 13.10.2007 16:24

может есть смысл прикрепить эту тему? :rolleyes:
а то я частенько её кидаю своим подаванцам :umnik2: , а искать её всё сложнее :(

DRAGOnoid 16.10.2007 13:49

спасибо что прикрепили - реально помогает!:victory:

у меня тут новая трудность - немогу решить.

ситуация такова. есть один единственный SWF в котором в библиотеке забиты классы спрайтов (предметов)

эти предметы могут быть а могут небыть..
их имена я подгружаю из XML. дальше по этим именам ищю такое свойство в главном классе и создаю объект.

но есть пара странностей - уже на первичном классе немогу без глюков определить есть ли класс в библиотеке.

вот как я делаю
Код:

trace (bread);                // выдаёт [class bread]
trace (this.hasOwnProperty(bread));        // выдаёт false    Оо
// ладно способ 2
trace (getDefinitionByName('bread'));        // выдаёт [class bread]
// однако
// trace (getDefinitionByName('bread2'));// ReferenceError: Error #1065: Variable bread2 is not defined.
// объединяю
trace (this.hasOwnProperty(getDefinitionByName('bread')));//  выдаёт false    Т_Т

что делать? :(

etc 16.10.2007 13:54

Ну правильно выдает false.
Во-первых, ты передаешь не строковое значение в hasOwnProperty. Во-вторых, для того, чтобы определить, есть ли класс, можно использовать loaderInfo.applicationDomain.hasDefinition().

DRAGOnoid 16.10.2007 14:09

а hasOwnProperty - на какие свойства работает? я так понял на классы нет - потому что так тоже не пашет
trace (this.hasOwnProperty('bread')); // выдаёт false Оо

спасибо - this.loaderInfo.applicationDomain.hasDefinition('bread') - прикрасно заработал.

а ещё я вспомнил метод молотка и мата на любой случай жизни )
это обычный try =))

вот ещё вопрос - могу ли я как нибудь из конструктора любого класса или подкласса - получить свойства основного класса или главного Stage, без переносса ссылок ?

т.е. мне например хочется узнать из под-под-под.... класса Stage.stageWidth для ресайза...
или добавить общий клик.
можно ли как то обойти перенос ссылок с помощью переменных?

etc 16.10.2007 14:30

Естесственно, у this нет свойства bread.

Остальное не понял.

DRAGOnoid 16.10.2007 14:39

есть основной класс
Код:

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

public class MenuWindow extends Sprite {
public function MenuWindow        ():void        {
trace (Stage.stageWidth); // выдаст например 500
var test = new Test(this);
}
}
}

import flash.display.*;
import flash.events.*;

class Test {
public function test(Parent:Object):void{
trace (Parent.Stage.stageWidth); // выдаст например 500
trace (Stage.stageWidth); // выдаст ошибку}
}


etc 16.10.2007 14:45

У класса Stage нет статического свойства stageWidth.


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

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