Модераторы: SoWa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция, возвращение значений 
:(
    Опции темы
jorka
Дата 6.3.2010, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Как сделать что б функция возвращала массив данных?
К примеру Я ввожу три аргумента(x,y,z), перевожу их в 2д координаты и надо что б функция вернула 2 числа.
PM MAIL   Вверх
bars80080
Дата 6.3.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: нет
Всего: 315



напиши 
Код

trace('x: '+ x +', y: '+ y);


Добавлено через 1 минуту и 28 секунд
или ты про возврат значений из функции?

тогда:

Код

function qwer() {
    var r = new Array();
    r[0] = x; r[1] = y;
    return r;
}

PM MAIL WWW   Вверх
nns2009
Дата 6.3.2010, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Как бы мы не крутились функция будет возвращать один объект, поэтому:
1) Можно создать класс(например Point2D) и возвращать объект этого класса.
2) Или использовать динамические свойства объекта Object:
Код

public function point3DToPoint2D(x:Number, y:Number, z:Number)
{
       var o:Object = new Object()
       o.x = x
       o.y = y
       return o

       // Или короче return {x:x, y:y}
}

Вариант "или короче" в общем случае(для возврата нескольких значений) будет удобнее.


А ты тоже занимаешься разработкой 3d движка?

Добавлено через 3 минуты и 36 секунд
Цитата(bars80080 @  6.3.2010,  19:19 Найти цитируемый пост)
function qwer() {
    var r = new Array();
    r[0] = x; r[1] = y;
    return r;
}


Не очень хороший вариант: при использовании функции всегда нужно помнить на каком месте стоит x, а на каком y.
PM MAIL   Вверх
jorka
Дата 6.3.2010, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



to nns2009, супер, спасибо, да) Но пока не особо получается, в нете мало документации для "любителей", пишут в основном про уже готовые 3д обьекты, а как с нуля все сделать не пишут.
Еще такие вопросы:
1) Точку с запятой ставить не обязательно в конце строк?
2) Как удобней вывести данные? К примеру Я напишу
Код

trace(point3DToPoint2D(1,2,3).x+"  "+point3DToPoint2D(4,5,6).y);    

или 
Код

globalX = point3DToPoint2D(1,2,3).x;
globalY = point3DToPoint2D(1,2,3).y;
trace(globalX+"  "+globalY);

В обоих случаях надо 2 раза проганять процедуру, а это несколько накладно(

Это сообщение отредактировал(а) jorka - 6.3.2010, 22:34
PM MAIL   Вверх
bars80080
Дата 6.3.2010, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: нет
Всего: 315



ну, это ж очевидно - присвоить результат переменной

Код

global = point3DToPoint2D(1,2,3);
trace(global.x+"  "+global.y);

PM MAIL WWW   Вверх
jorka
Дата 6.3.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



to bars80080, спасибо, Я чето подумал что при таком присвоении ссылка передается, а не данные. 
PM MAIL   Вверх
bars80080
Дата 6.3.2010, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: нет
Всего: 315



хм, скорее всего, да, ссылка. то есть ссылка на ячейку памяти, в которой хранится сей объект или массив (их значения, свойства, ключи). но при обращении к ней, ты не уже не производишь повторного вычисления данных
PM MAIL WWW   Вверх
nns2009
Дата 7.3.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Цитата(jorka @  6.3.2010,  22:29 Найти цитируемый пост)
1) Точку с запятой ставить не обязательно в конце строк?

Можно не ставить.(Но если пишешь несколько действий в одну строку то между ними нужно поставить).

Цитата(jorka @  6.3.2010,  22:29 Найти цитируемый пост)
Но пока не особо получается, в нете мало документации для "любителей", пишут в основном про уже готовые 3д обьекты, а как с нуля все сделать не пишут.

Я тоже этим занимаюсь, правда функцию для преобразования координат из 3d в 2d я уже реализовал и протестировал: она работает абсолютно правильно(я назвал эту функцию toScreen()). Сейчас я бьюсь над тем, чтобы более ближние треугольники отображались поверх более дальних.
Если хочешь, будем вместе думать над разработкой движка.


Цитата(jorka @  6.3.2010,  23:11 Найти цитируемый пост)
Я чето подумал что при таком присвоении ссылка передается, а не данные.  

Передаётся ссылка, но результат тот же самый, как если бы передавались данные.
PM MAIL   Вверх
jorka
Дата 7.3.2010, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



Цитата(nns2009 @ 7.3.2010,  15:45)
Я тоже этим занимаюсь, правда функцию для преобразования координат из 3d в 2d я уже реализовал и протестировал: она работает абсолютно правильно(я назвал эту функцию toScreen()). Сейчас я бьюсь над тем, чтобы более ближние треугольники отображались поверх более дальних.
Если хочешь, будем вместе думать над разработкой движка.

С движком проблем нету, правда Я делаю более простенький, не треугольниками, а квадратами, если тормозить не будет, то потом переделаю. У меня больше проблем с самим ас3. Рисую два пересекающихся квадрата и на месте пересечения дырка получается))

С помощью drawTriangles будет конечно лучше рисовать сложные фигуры, но меня пугает сама мысль о процесе разбития обьекта на треугольники)

Это сообщение отредактировал(а) jorka - 7.3.2010, 23:44
PM MAIL   Вверх
nns2009
Дата 8.3.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Цитата(jorka @  7.3.2010,  23:22 Найти цитируемый пост)
С движком проблем нету, правда Я делаю более простенький, не треугольниками, а квадратами, если тормозить не будет, то потом переделаю. У меня больше проблем с самим ас3. Рисую два пересекающихся квадрата и на месте пересечения дырка получается))

А какая, по сложности разница, рисовать треугольники или квадраты(хотя почему квадраты? Ведь квадрат в 3d пространстве спроецируется совсем не обязательно в квадрат, а например в четырёхугольник).

Цитата(jorka @  7.3.2010,  23:22 Найти цитируемый пост)
С помощью drawTriangles будет конечно лучше рисовать сложные фигуры, но меня пугает сама мысль о процесе разбития обьекта на треугольники)

Лично я у себя в движке работаю над иерархической системой отображения, как в AS 3.0, но в 3d. Будет очень удобно: сложные объекты создаём из простых и манипулируем ими как единым целым. Например, чтобы сдвинуть куб вверх, не обязательно будет сдвигать вверх каждый из 12 треугольников: можно будет сдвинуть контейнер, содержащий данные треугольники. В свою очередь, из кубов можно будет составить, например, пирамиду, и чтобы сдвинуть её, достаточно будет одной строчки кода.
PM MAIL   Вверх
jorka
Дата 8.3.2010, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



nns2009, у меня движок попроще будет( жаль нескем такие нюансы обговорить, ато чуствую не раз еще переделывать прийдется
PM MAIL   Вверх
jorka
Дата 9.3.2010, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 25.10.2008

Репутация: нет
Всего: нет



1)По завершении процедуры переменная "о" уничтожается или остается висеть в памяти?
Код

public function point3DToPoint2D(x:Number, y:Number, z:Number){
       var o:Object = new Object()
       o.x = x
       o.y = y
       return o}


2) Как лучше записать/оформить переменную и почему(особенно интересует с точки зрения быстродействия)?
Код

Вариант 1:
var o:Object = new Object()
      o.x = x
      o.y = y

Вариант 2:
var o:Array
      o[0] = x
      o[1] = y

PM MAIL   Вверх
ksnk
Дата 9.3.2010, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: нет
Всего: 386



1) она остается висеть в памяти, до тех пор, пока указатель на нее сохраняется... Надеюсь, эта фраза со временем приведет кого-нибудь к просветлению  smile 
2) var o={x:x,y:y};
эта запись короче. Это единственная причина. выиграть существенно на разной форме записи элементов невозможно ;)


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
IDVsbruck
Дата 10.3.2010, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 1
Всего: 22



Кошерней всего создать отдельный класс с полями (с геттерами и сеттерами) и передавать переменную этого класса - это наиболее оптимальное, удобное и функциональное решение.
PM MAIL   Вверх
nns2009
Дата 14.3.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Цитата(jorka @  9.3.2010,  20:19 Найти цитируемый пост)
1)По завершении процедуры переменная "о" уничтожается или остается висеть в памяти?

Об этих вещах заботиться среда выполнения Flash: если на объект не остаётся не одной ссылки, то среда выполнения Flash удалит объект когда ей вздумается.

Цитата(jorka @  9.3.2010,  20:19 Найти цитируемый пост)
2) Как лучше записать/оформить переменную и почему(особенно интересует с точки зрения быстродействия)?

С точки зрения ООП всегда нужно возврвщать определённый тип данных(например создать класс Point2D): это и быстрее, чем создавать динамические переменные и если ты вдруг в будущем наберёшь имя переменной экземпляра(свойства) неправильно, то компилятор сообщит тебе об этом.
Или можно так: return {x:x, y:y}

Массивы желательно использовать для хранения данных одинакового типа и назначения. Например поэтому:
Код

var o:Array = Point3DToPoint2D(12, 14, -6)
trace(o[0]) // Интересно, что выведется x или y

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | ActionScript 3 | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.