1. ActionScript / Говнокод #4856

    −141

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    public function getToBrick(brick:Point):void
    {
    	function f():void {
    		scale_sliderbar.position = scale_sliderbar.position;
    		view_wall.x = (brick.x * -300) * view_wall.scaleX + 150;
    		view_wall.y = (brick.y * -178) * view_wall.scaleY + 258;
    		testWallPosition();
    	}
    	f();
    	f();
    	f();
    }

    Бог любит троицу! =)
    Самое смешное, если убрать троекратный вызов f(); - то все работает как-то коряво..
    Функция testWallPosition(); проверяет min&&max координаты у стены, там также нет никаких математических просчетов.
    Хоть убейте - не пойму - но аффору +100500 за потрясный кусок кода:)

    Запостил: KirAmp, 08 Декабря 2010

    Комментарии (9) RSS

    • scale_sliderbar.position = scale_sliderbar.position;

      o'rly?
      Ответить
      • Без этого тоже не работает)).. Любая оптимизация этой функции приводит к плачевным последствиям
        Ответить
      • предположу: может стоит вызвать метод draw?
        Ответить
    • Не верю. Ищи баг в другом месте. Отладчика там, что ли, нету?
      Или это типа многопоточное приложение, и говно нужно, чтобы затормозить поток, чтобы успел посчитаться другой поток? Тогда добавь sleep семафор поставь.
      Ответить
      • во флеше нет многопоточности (если не считать коллбеки от запросов на сервер).
        скорее всего там что-то не успевает прорисоваться. Там же в каждом кадре какую-то часть времени вычисляется код, а какую-то -- рендерится картинка.
        Ответить
        • Ананимус, ты был прав. Картинка не успевает прорисовываться... Нашел зачетную многотысячистрочную логику и понял что флеш не в силах это переворить
          Ответить
        • Вот так работает на ура
          public function getToBrick(brick:Point):void 
          		{
          			view_wall.x = (brick.x * -300) * view_wall.scaleX + 320 - (300 * view_wall.scaleX) / 2;
          			view_wall.y = (brick.y * -178) * view_wall.scaleY + 370 - (178 * view_wall.scaleY) / 2;
          			testWallPosition();
          			
          			dispatchEvent(new Event(MOVE_WALL));
          		}
          Ответить

    Добавить комментарий