Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   данные из функции AS3 (http://www.flasher.ru/forum/showthread.php?t=211769)

Zebestov 06.11.2015 16:47

Цитата:

Сообщение от exsites (Сообщение 1188724)
А вот так можно?

Ну конечно можно! Другое дело, что new_img в этом месте выполнение программы будет равен null, как и img. И зачем тебе это?

ZackMercury 06.11.2015 17:03

Цитата:

И невозможность получить результат выполнения функции в любом месте это "надевание трусов через голову".
И в каком месте нельзя получить результат выполнения функции?

Wolsh 06.11.2015 19:47

резоннее спросить, в какое время.

ZackMercury 06.11.2015 20:34

Ну что ж вы, сир, не вдумываетесь, временами, в столь простые вещи?
Неужто вы хотите полагать, что код, за телом функции линейно следующий лишь выполнится не сразу, а после окончания загрузки?
В таком бы случае, зачем там нужна функция вообще? По вашей логике, там было проще прописать загрузку, а ассет на строке чуть ниже стал уже б загружен.
Нет, здесь, внимание, такое есть понятие, как асинхронность. Сиё, извольте объяснить, означает, что слушаем мы "onComplete" событие лишь для того, чтобы поймать то место, самое то место, где ассет наш уже загружен, а всё, что далее идёт за функцией начинает выполняться в тот же миг, как начинается загрузка.

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

exsites 06.11.2015 20:43

А я и не понимаю, как получить мне новую координату и ширину в следующей функции?

Код AS1/AS2:

var x_ = 320;
var y_ = 0;
var new_width = stage.stageWidth - 320;
stage.addEventListener(Event.RESIZE, resizeHandler);
function resizeHandler(event:Event):void {
 if (stage.stageWidth == '800') {
        x_ = 320;
        new_width = stage.stageWidth - 320;
 } else {
        x_ = 0;
        new_width = stage.stageWidth;
 }
}
 
 
 
function completeLoadImage(event:Event):void
{
 
containerImages_mc.removeChildAt(0);
var bitmapData:BitmapData = event.target.loader.content.bitmapData as BitmapData;
var bitmap:Bitmap = new Bitmap(bitmapData);
containerImages_mc.addChildAt(bitmap, 0);
 
 
var w= bitmap.width;
var h= bitmap.height;
var ar= w / h;       
var new_h = new_w / ar;
 
containerImages_mc.x = x_; // вот тут получить координату
containerImages_mc.y = y_;
var new_w = new_width; // вот тут получить новую ширину
 
containerImages_mc.width = new_w;
containerImages_mc.height = new_h;
var bitmapW:Number = bitmap.width;
var bitmapH:Number = bitmap.height;
 
bitmap.width = Math.floor(bitmapW);
bitmap.height = Math.floor(bitmapH);
}


Psycho Tiger 06.11.2015 20:46

Цитата:

Сообщение от ZackMercury (Сообщение 1188732)
Ну что ж вы, сир, не вдумываетесь, временами, в столь простые вещи?
Неужто вы хотите полагать, что код, за телом функции линейно следующий лишь выполнится не сразу, а после окончания загрузки?
В таком бы случае, зачем там нужна функция вообще? По вашей логике, там было проще прописать загрузку, а ассет на строке чуть ниже стал уже б загружен.
Нет, здесь, внимание, такое есть понятие, как асинхронность. Сиё, извольте объяснить, означает, что слушаем мы "onComplete" событие лишь для того, чтобы поймать то место, самое то место, где ассет наш уже загружен, а всё, что далее идёт за функцией начинает выполняться в тот же миг, как начинается загрузка.

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

Что-то у меня от таких формулировок затошнило.

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

udaaff 06.11.2015 20:59

Цитата:

А я и не понимаю, как получить мне новую координату и ширину в следующей функции?
Сделайте одну функцию отвечающую за масштабирование изображения, если оно загружено.
Код AS3:

function update(newWidth:Number, newHeight:Number):void
{
    if (!myImage)
        return;
    // здесь изменяем размеры
}

Изменился размер - вызвали update(), есть уже у нас изображения - ок, меняем размер, нет - ничего не происходит.
Загрузилось изображение - вызвали update(stage.stageWidth, stage.stageHeight), выставили текущие размеры сцены.

ZackMercury 06.11.2015 21:00

exsites, друг мой, успокойтесь вы, расслабьтесь, отдохните.
Существуют в мире программирования глобальные - общие, и локальные переменные.
Работающая программа на коем-то ни было языке - это совокупность глобальных переменных(классов с переменными), кои изменяются по всяким событиям, на которые мы добавим слушатель.
Представьте себе это, как таймлайн, на котором одно за другим по очереди всплывают какие-то события, и код ваш обрабатывает их, тот, который внутри обработчиков(функций).
https://pp.vk.me/c625826/v625826630/...L8yEj7A-hY.jpg

exsites 06.11.2015 21:20

Цитата:

Сообщение от Psycho Tiger (Сообщение 1188734)
Да, нет ни одного довода в пользу асинхронных методов там, где нужны (были бы удобнее) синхронные.

Вот как-то я об этом же.

Цитата:

Сообщение от udaaff (Сообщение 1188735)
Сделайте одну функцию отвечающую за масштабирование изображения, если оно загружено.
Код AS3:

function update(newWidth:Number, newHeight:Number):void
{
    if (!myImage)
        return;
    // здесь изменяем размеры
}

Изменился размер - вызвали update(), есть уже у нас изображения - ок, меняем размер, нет - ничего не происходит.
Загрузилось изображение - вызвали update(stage.stageWidth, stage.stageHeight), выставили текущие размеры сцены.

Так опять же переменные получаются внутри функции, наружу-то их не вытащить... Как я передам их туда куда хочу..?



Цитата:

Сообщение от ZackMercury (Сообщение 1188736)
exsites, друг мой, успокойтесь вы, расслабьтесь, отдохните.
Существуют в мире программирования глобальные - общие, и локальные переменные.

Да спокоен я как стадо мамонтов:-)))
Глобальные переменные зло. Во всяком случае в php.

Меня интересует, могу ли я результат выполнения функции передать в другую функцию как я написал в предыдущем посте? Можно или нет? Или мне надо весь код заново переписывать ввиду того что надо по другому?

Zebestov 06.11.2015 21:28

Цитата:

Сообщение от Psycho Tiger (Сообщение 1188734)
нет ни одного довода в пользу асинхронных методов там, где нужны (были бы удобнее) синхронные

Но здесь-то не тот случай. Здесь имеется пользователь, которому надо что-то насвистывать, пока что-то грузится. Это же тебе не PHP, где все процессы и так фоновые и пользователю пабарабану, что весь код скрипта ждет, пока что-то куда-то загрузится, пользователь ждет конечного результата в той или иной форме, тупо втыкая в экран.

Кстати! Этот процесс тоже, выходит, асинхронный: пока ты крутишь перед носом пользователя фронтенд-прелоадер, где-то там в бэкенде скрипт синхронно для себя, но асинхронно для пользователя, пыхтит над результатом, которого этот самый пользователь ожидает.


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

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