Одна и та же функция работает в C# и не работает в JS

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Одна и та же функция работает в C# и не работает в JS

Сообщение Summerscream 27 апр 2011, 23:20

Столкнулся со следующей проблемой. Написал небольшую функцию на C#, задуманное она с горем пополам совершала, но мне вштырило переписать проект под JS, В результате код работать отказался, при чем не на этапе компиляции, а в процессе работы приложения. Итак, вот код на С#, работающий:
Синтаксис:
Используется csharp
public class Rock : MonoBehaviour {
       
        public int ID = 0;
        public float pastTime = 0;
        public string status = "";
       
        public int vRocks = 0;
       
        void countBlackSearch()
        {
                int vRockUp = 0;
                int vRockDown = 0;
                int direction = GameObject.Find("RULES_KEEPER").GetComponent<Rules>().levelSize;

                        for (int i = 1; i<5; i++)
                        {
                                if (ID != 0)
                                {
                                GameObject Rock;
                                       
                                if (i == 1){Rock = GameObject.Find(""+ID);}
                                else {Rock = GameObject.Find(""+(ID+direction));}
                               
                                if (status == "b")
                                {
                                print("name  "+Rock.name);
                                print("status "+Rock.GetComponent<Rock>().status);
                                       
                                if (Rock.GetComponent<Rock>().status == status && Rock.GetComponent<Rock>().ID == ID+direction)
                                {
                                        ++vRockUp;      
                                        int k = 0;
                                       
                                        if (i == 1){k = 2;} else k = i;
                                        direction = k * GameObject.Find("RULES_KEEPER").GetComponent<Rules>().levelSize;
                                }
                                else i=6;
                                }
                                }
                                print("vRock "+vRockUp);
                                if (i  >= 4) {print("STACK");}
                        }
        }
}
 


Оно же, но без некоторого дебажного мусора:
Синтаксис:
Используется javascript
public var col : String = "";
public var ID : int;

public var foundedRocks : int;

function blackRockSearch(){
        var RK : GameObject = GameObject.Find("RULES_KEEPER");
        var direct : int = RK.GetComponent(Rules).levelSize;
        if (col == "b" && RK.GetComponent(Rules).lastBlackRockWasPlaced == true)
        {
                for (var i=1; i<5; i++)
                {
                        var Rock;
                        if (i == 1){Rock == GameObject.Find(""+ID);}
                        else {Rock = GameObject.Find(""+(ID+direct));}
                       
                        if (Rock.GetComponent(Rock).col == col && Rock.GetComponent(Rock).ID == ID+direct)
                        {
                                ++foundedRocks;
                                var k : int = 0;
                                if (i ==1){k = 2;} else k = i;
                                direct = k * RK.GetComponent(Rules).levelSize;
                        }
                        else i=6;
                }
                lastBlackRockWasPlaced = false;
        }
}
 


В процессе выполнения программы вылетает Exception:
NullReferenceException: Object reference not set to an instance of an object
Boo.Lang.Runtime.RuntimeServices.Dispatch (System.Object target, System.String cacheKeyName, System.Type[] cacheKeyTypes, System.Object[] args, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.Dispatch (System.Object target, System.String cacheKeyName, System.Object[] args, Boo.Lang.Runtime.DynamicDispatching.DispatcherFactory factory)
Boo.Lang.Runtime.RuntimeServices.Invoke (System.Object target, System.String name, System.Object[] args)
Rock.blackRockSearch () (at Assets/Scripts/Rock.js:17)
Rock.Update () (at Assets/Scripts/Rock.js:31)


Ругается на строку:
Синтаксис:
Используется javascript
if (Rock.GetComponent(Rock).col == col && Rock.GetComponent(Rock).ID == ID+direct)


Я предполагаю, что я делаю что-то неправомерное с GameObject, объявляю криво или использую после объявления. Пробовал уже разные варианты, пока не помогло. Больше всего смущает именно тот факт, что в C# все ок.

Смиренно прошу мудрого совета старших. Пните меня в нужном направлении, а то заплутал малямсь.
Summerscream
UNIт
 
Сообщения: 62
Зарегистрирован: 01 фев 2011, 00:34
Откуда: msc

Re: Одна и та же функция работает в C# и не работает в JS

Сообщение DbIMok 28 апр 2011, 00:50

в чем глубинный смысл называть внутреннюю переменную так же как класс? искать объект и использовать не проверяя на null это несколько опрометчиво. получать каждый раз компонент тоже не очень хорошо + его тоже надо проверять. зачем переписывать на юнитискрипт? после устранения явных косяков, если не поможет, посмотри рефлектором что за код в итоге получается
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.8k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Одна и та же функция работает в C# и не работает в JS

Сообщение Summerscream 07 июл 2011, 00:22

Большое спасибо. После совета стал проверять получено ли вобще значение и выяснилось, что я в одном месте тупо попутал "==" и "=".
Summerscream
UNIт
 
Сообщения: 62
Зарегистрирован: 01 фев 2011, 00:34
Откуда: msc


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


cron