Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.01.2007, 01:48
Madeyra вне форума Посмотреть профиль Отправить личное сообщение для Madeyra Найти все сообщения от Madeyra
  № 1  
Ответить с цитированием
Madeyra

Регистрация: Sep 2006
Сообщений: 16
Arrow Проблема с реализацией класса

Есть следующий код:
Код:
class Vector {
	public var coordinates:Array;
	public function Vector() {
		this.coordinates = this.controllElem(arguments);
	}
	public function dimension():Array {
		var misc = this.coordinates.concat();
		return misc;
	}
	public function length(roundable:Boolean):Number {
		roundable = (roundable == null || !(typeof roundable == "boolean") || !roundable) ? false : true;
		var misc = this.coordinates.concat();
		var summ:Number = 0;
		for (var i in misc) {
			summ += Math.pow(misc[i], 2);
		}
		return (roundable) ? Math.round(Math.sqrt(summ)) : Math.sqrt(summ);
	}
	private function controllElem(param:Array):Array {
		//if there are more than one element in arguments, return shifted
		var shifter:Array = (param.length != 1) ? param.shift() : param;
		shifter.reverse();
		for (var i in shifter) {
			//elements can be not a number - in this case just set as 0
			shifter[i] = isNaN(shifter[i]) ? 0 : shifter[i];
		}
		var reverse = shifter.reverse();
		return reverse;
	}
	public function coord(param:Array) {
		this.coordinates = this.controllElem(arguments);
	}
	public function invert():Vector {
		var __coord = coordinates;
		for (var i in __coord) {
			__coord[i] *= -1;
		}
		trace(__coord);
		var __vec:Vector = new Vector(__coord);
		trace(__vec.coordinates);		
                          return __vec;
	}
}
все хорошо работает за исключением одного:
в выделенном месте создается еще один экземпляр класса,
но проблема в том, что трейсится всегда ноль, хотя по идее должно быть инвертированные координаты вектора. Не могу понять в чем дело...


Последний раз редактировалось Madeyra; 26.01.2007 в 01:53.
Старый 26.01.2007, 02:17
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Я тоже не могу понять, что значит «создается ещё один экземпляр класса» и «трейсится всегда ноль».

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

Старый 26.01.2007, 02:36
Madeyra вне форума Посмотреть профиль Отправить личное сообщение для Madeyra Найти все сообщения от Madeyra
  № 3  
Ответить с цитированием
Madeyra

Регистрация: Sep 2006
Сообщений: 16
попробую вот так объяснить:
метод invert() данного вектора создает еще один вектор у которого каждая координата является числом, равным произведению соответствующей координаты данного вектора на -1.
Код:
var __vec:Vector = new Vector(__coord);
где __сoord - массив с координатами данного вектора
умноженными на -1. И свойство coordinates этого вектора выводится как равным нулю


Последний раз редактировалось Madeyra; 26.01.2007 в 02:39.
Старый 26.01.2007, 02:38
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
А где происходит обработка полученного в конструкторе массива? У вас — нигде не происходит, конструктор вообще принимает 0 параметров. Зачем юзать arguments там, где не надо?
Впрочем, строка var reverse = shifter.reverse(); меня сильно смущает. Метод reverse возвращает Void, между прочим. И ещё не понимаю смысла в двойном развороте массива.


Последний раз редактировалось etc; 26.01.2007 в 02:42.
Старый 26.01.2007, 02:40
Madeyra вне форума Посмотреть профиль Отправить личное сообщение для Madeyra Найти все сообщения от Madeyra
  № 5  
Ответить с цитированием
Madeyra

Регистрация: Sep 2006
Сообщений: 16
Код:
public function Vector() {
		this.coordinates = this.controllElem(arguments);
	}

Старый 26.01.2007, 02:44
vic_ вне форума Посмотреть профиль Отправить личное сообщение для vic_ Посетить домашнюю страницу vic_ Найти все сообщения от vic_
  № 6  
Ответить с цитированием
vic_
 
Аватар для vic_

Регистрация: Sep 2006
Адрес: Zaporozhye, Ukraine
Сообщений: 141
arguments обрабатывает. не совсем читабельно, но почему нет

Старый 26.01.2007, 02:45
Madeyra вне форума Посмотреть профиль Отправить личное сообщение для Madeyra Найти все сообщения от Madeyra
  № 7  
Ответить с цитированием
Madeyra

Регистрация: Sep 2006
Сообщений: 16
в смысле код не читабельный?

Старый 26.01.2007, 02:49
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 8  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
В смысле код кривой. Про reverse я уже сказал (во-первых он не нужен, во-вторых если надо получить ничего, то проще return вообще не писать).

Старый 26.01.2007, 02:55
Madeyra вне форума Посмотреть профиль Отправить личное сообщение для Madeyra Найти все сообщения от Madeyra
  № 9  
Ответить с цитированием
Madeyra

Регистрация: Sep 2006
Сообщений: 16
Код:
если использовать for...in для массива на примере
var a:Array = [1,2,3]
for(i in a) {
    trace(a[i])
}
выводится как 3,2,1 а надо 1,2,3 и поэтому приходится реверс
использовать
что касается return то надо получить новый вектор

Старый 26.01.2007, 02:57
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 10  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Зачем надо? for in в обратную сторону не весь массив что-ли обойдет? В данном случае это точно лишнее. Кроме того, метод reverse, повторюсь, возвращает Void. Вникаем. Ищите ошибку, я уже указал, что и где. И пошёл спать.

Создать новую тему Ответ Часовой пояс GMT +4, время: 07:29.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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