Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Выбор оружия MOUSE_WHEEL. (http://www.flasher.ru/forum/showthread.php?t=183460)

mihael_p 22.08.2012 17:12

Выбор оружия MOUSE_WHEEL.
 
Пытаюсь сделать выбор оружия по колесу мышки, додумался до такого кода:

Код AS3:

private var nw:int;
private var weapons:Array = [1,0,0,0,1,0];
stage.addEventListener(MouseEvent.MOUSE_WHEEL, whelled);
private function whelled(e:MouseEvent):void
{
 
        nw += int(e.delta / 2);
 
        if (nw < 0)
        {
            nw = 5;
        }
        if (nw > 5)
        {
            nw = 0;
        }
 
        if (weapons[nw] != 0)
        {
                changeWeapon(nw);
        }else{
                for (var i:int = 0; i < weapons.length; i++)
                {
                        if (weapons[i] != 0)
                        {
                                changeWeapon(i);
 
                        }
                }
        }
}
 
public function changeWeapon(num:int):void
{
        var mm:MovieClip = mc.wpgroup.getChildByName("wp" + num);
        weaponMC = mm;
        TweenLite.to(mc.colored, 0.5, { x:weaponMC.x + mc.wpgroup.x, y:weaponMC.y + mc.wpgroup.y } );
}

Суть в том, что должно работать примерно так: повернул колесо мышки на один "щелчок" функция должна выбирать купленное, индикатор которого - это "1" в массиве "weapons",оружие .
Если функция наткнулась на 0 в массиве "weapons", то функция должна искать "1" в массиве и как только нашла, отправить индекс в спец функцию которая двигает индикатор выбранного оружия. Мой код работает криво, бывает индикатор дернулся и вернулся обратно. Подскажите, как быть?

caseyryan 22.08.2012 18:19

Код AS3:

private var _curIndex:int = 0;
 
public function Main() {
        stage.addEventListener(MouseEvent.MOUSE_WHEEL, onWheelEvent);
}
 
private function onWheelEvent(e:MouseEvent):void {
        var delta:int = e.delta;
        var weapons:Array[1, 0, 0, 0, 1, 0];
        if (delta < 0) _curIndex--;
        else _curIndex++;
 
        var length:int        = weapons.length;
        _curIndex                = trimIndex(_curIndex, length -1);
 
        if (weapons[_curIndex] == 0) {
                var i:int;
                if (delta > 0) {
                        i = 0;
                        while (i < length) {
                                _curIndex++;
                                _curIndex = trimIndex(_curIndex, length - 1);
                                if (weapons[_curIndex] != 0) {
                                        trace("ОРУЖИЕ НАЙДЕНО, ПРОКРУТКА ВВЕРХ", weapons[_curIndex], _curIndex);
                                        break;
                                }
                                i++;
                        }
                } else {
                        i = length;
                        while (i) {
                                _curIndex--;
                                _curIndex = trimIndex(_curIndex, length - 1);
                                if (weapons[_curIndex] != 0) {
                                        trace("ОРУЖИЕ НАЙДЕНО, ПРОКРУТКА ВНИЗ", weapons[_curIndex], _curIndex);
                                        break;
                                }
                                i--;
                        }
                }
        }
 
        trace("НУЖНОЕ ОРУЖИЕ:", weapons[_curIndex]);
 
}
private function trimIndex(index:int, maxValue:int):int { // убеждается, что индекс никода не выходит за нужные пределы
        if (index < 0) index = maxValue;
        else if (index > maxValue) index = 0;
        return index;
}


alatar 22.08.2012 19:46

Код AS3:

private var _weapons:Array[1, 0, 0, 0, 1, 0];
private var _currenWeaponIndex:int = 0;
 
private function mouseWheelHandler(event:MouseEvent):void
{
    var weaponIndex:int = delta > 0 ? _weapons.indexOf(1, _currenWeaponIndex) : _weapons.lastIndexOf(1, _currenWeaponIndex);
 
  if (weaponIndex != -1)
  {
        _currenWeaponIndex = weaponIndex;
        specialFunction(weaponIndex); //Что-то нашли
  }
}


mihael_p 23.08.2012 11:46

caseyryan, Спасибо огромное, то, что нужно!
alatar, не знаю как у Вас, но у меня weaponIndex постоянно выдает "0"

alatar 23.08.2012 12:04

Цитата:

но у меня weaponIndex постоянно выдает "0"
Потому, что сразу находит 1 в нулевом индексе. Надо предварительно изменить _currenWeaponIndex.
Код AS3:

private var _weapons:Array[1, 0, 0, 0, 1, 0];
private var _currenWeaponIndex:int = 0;
 
private function mouseWheelHandler(event:MouseEvent):void
{
    _currenWeaponIndex = delta > 0 ? (_currenWeaponIndex + 1)%_weapons.length : (_currenWeaponIndex - 1)%_weapons.length;
    var weaponIndex:int = delta > 0 ? _weapons.indexOf(1, _currenWeaponIndex) : _weapons.lastIndexOf(1, _currenWeaponIndex);
 
  if (weaponIndex != -1)
  {
        _currenWeaponIndex = weaponIndex;
        specialFunction(weaponIndex); //Что-то нашли
  }
}


mihael_p 23.08.2012 12:33

Точно! Спасибо, alatar.

Nace 23.08.2012 12:54

Алтар, можете объяснить как массив этот работает:
Код AS3:

private var _weapons:Array[1, 0, 0, 0, 1, 0];


alatar 23.08.2012 12:57

В смысле? Как любой другой массив. Если хотите знать, зачем там 0 и 1, то спрашивайте у ТС.

Nace 23.08.2012 12:58

А что такое "ТС"??

alatar 23.08.2012 13:00

Транслитерация topic starter. Автор темы.

Nace 23.08.2012 13:11

А можете, тогда объяснить как эта строчка работает?:
Код AS3:

var mm:MovieClip = mc.wpgroup.getChildByName


alatar 23.08.2012 13:25

http://help.adobe.com/ru_RU/FlashPla...etChildByName()


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

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