Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите перевести из java в C#, Помогите перевести из java в C# 
V
    Опции темы
Stas96
Дата 11.11.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



Ув.Программисты помогите перевести java код:
Код

var projectile : Rigidbody;
var speed = 20;
 
function Update()
{
        if( Input.GetButtonDown( "Fire1" ) )
        {
                var instantiatedProjectile : Rigidbody = 
                Instantiate( projectile, transform.position, transform.rotation );
                instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, speed ) ); 
                Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider );
        }
}

на язык С# .Заранее благодарен....
PM MAIL   Вверх
AlexeyVorotnikov
Дата 12.11.2009, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

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



Так это ж не Java. Вам, наверное, надо в форум по Javascript. Или в форум по C#.

Это сообщение отредактировал(а) AlexeyVorotnikov - 12.11.2009, 12:27


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Stas96
Дата 12.11.2009, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



Меня сюда Админы переместили....

Добавлено @ 11:51
Вот моя наработка:
Код

using UnityEngine;  
using System.Collections;  
using UnityEditor;  
using System.IO; 

static void Launcher 

   {  
         for(Input.GetButtonDown( "Fire1" ) )  
           {  
             int speed = 20;  
                   Rigidbody instantiatedProjectile =   
                   Instantiate(projectile, transform.position, transform.rotation );  
                   instantiatedProjectile.velocity = transform.TransformDirection(new Vector3( 0, 0, speed ) );   
                   Physics.IgnoreCollision(instantiatedProjectile. collider, transform.root.collider );  
           } 

     } 


но все равно ошибка "Parsing error" 


PM MAIL   Вверх
LSD
Дата 12.11.2009, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Stas96 @  11.11.2009,  12:58 Найти цитируемый пост)
Программисты помогите перевести java код:

1. Это не Java, это JavaScript
2. Тут явно используются какие-то дополнительные классы (Rigidbody, Physics и т.д.) и функции (Instantiate) их тоже надо переводить на C#.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
KelTron
Дата 12.11.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Stas96 @  12.11.2009,  11:49 Найти цитируемый пост)
но все равно ошибка "Parsing error"

Ты чё это в интерпретатор пихаешь?))

JavaScript в С# ты так дословно не переведёшь, сначала разберись что делает код, а потом напиши аналогичный по функциональности на C#.


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
Stas96
Дата 12.11.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



Я не изучаю С# smile  точнее изучаю но мелкими шагами  smile   и много не понятно smile ,я С++ изучаю.Просто двежок Unity  я качал бесплатную версию которая не поддерживает С++. smile  smile  smile 
Вот скопировал отрывок из мануала: smile 

Что мы хотим от скрипта? Мы хотим обнаружить, когда пользователь нажмёт клавишу огня, затем вызвать новый экземпляр ракеты и запустить её с определённой скоростью туда, куда пользователь целится. Давайте разбираться с кодом:
Код
  
var projectile : Rigidbody; 
var speed = 20; 
function Update()

Это начало скрипта, в котором объявляются публичные переменные (они выступают в роли свойств скрипта) и функция Update.
Код

    if( Input.GetButtonDown( "Fire1" ) )

Сначала мы хотим проверить, когда пользователь нажмёт клавишу огня. Клавиша огня «Fire1» по умолчанию назначена на ЛКМ и Ctrl (это может быть изменено в Editor→Project Settings→Input).
Код

    {
        var instantiatedProjectile : Rigidbody = Instantiate( 
            projectile, transform.position, transform.rotation );

Мы объявляем переменные для хранения ссылки на объект, чьи экземпляры вызываются. Тип переменной — Rigidbody, потому что ракета должна иметь физическое поведение.
Для вызова экземляра объекта используется функция Instantiate с тремя параметрами: объект для вызова, его местоположение и угол поворота. Возможна и другая конструкция (смотрите API guide), но мы будем использовать эту.
Первый параметр, projectile — это объект, который мы хотим создать. Это снаряд. Снаряд создан и настроен в редакторе. Для этого мы объявили переменную projectile как публичную, за пределами функций, что открывает её, делает доступной для редактора Unity.  Объект снаряда может быть создан в коде, однако если вы хотите изменять переменную, то лучше сделать это в редакторе через Inspector. 
Второй параметр, transform.position, создаёт снаряд (объект projectile) в той точке 3D-пространства, где находится пусковая установка (launcher).  Почему пусковая установка? Скрипт будет присоединён к пусковой установке и transform.position даёт нам её текущее положение (ключевое слово transform получает доступ к компоненту Transform того объекта, к которому прикреплён скрипт).
Третий параметр, transform.rotation, действует аналогично второму параметру и даёт созданному объекту тот же угол поворота, каким обладает пусковая установка. 
Код

        instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, speed ) );

Следующая часть кода создаёт перемещение ракеты. Для этого мы придаём ракете скорость, но в каком направлении (X, Y или Z)? В Scene щёлкните на FPC. Отобразятся стрелки перемещений (нажмите `W`, если не отображаются): красная (ось X), зелёная (ось Y) и синяя (ось Z). Голубая стрелка показывает, в какую сторону смотрит игрок (то есть, он смотрит в направлении оси Z). Соответственно, нужно придать ракете скорость по оси Z.
Скорость (velocity) — это свойство instantiatedProjectile. Как мы это узнали? Тип переменной instantiatedProjectile — Rigidbody. Посмотрим в API и увидим, что velocity — это свойство Rigidbody. Там же можете ознакомиться с другими свойствами. Для настройки velocity нужно задать скорость по каждой оси. Однако, есть небольшая проблема. Объекты в 3D используют две системы координат: локальная и мировая. В локальной системе координаты определяются относительно объекта. В мировой системе координаты абсолютные: верх, к примеру, будет всегда в одном направлении для всех объектов. Rigidbody.velocity должен определяться в мировой системе координат. Соответственно, мы должны преобразовать локальную ось Z в направление в мировой системе. Для этого используется функция transform.TransformDirection, которая использует Vector3 как аргумент. Переменная speed является публичной, так что может быть настроена в редакторе через Inspector.
Код

        Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider );
    }
}

Мы выключаем столкновения между ракетой и игроком. Если этого не сделать, то ракета будет сталкиваться с игроком при её вызове. Смотрите свойство IgnoreCollision в API.
Вот полный код: 

Код

var projectile : Rigidbody;
var speed = 20;

function Update()
{
    if( Input.GetButtonDown( "Fire1" ) )
    {
        var instantiatedProjectile : Rigidbody = 
        Instantiate( projectile, transform.position, transform.rotation );
        instantiatedProjectile.velocity = transform.TransformDirection( Vector3( 0, 0, speed ) ); 
        Physics.IgnoreCollision( instantiatedProjectile. collider, transform.root.collider );
    }
}


Добавлено через 2 минуты и 54 секунды
Если комуто станет понятно объясните пожалуйста мне что да как заранее благодарен!!!!
PM MAIL   Вверх
diadiavova
Дата 12.11.2009, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Stas96 @  12.11.2009,  11:49 Найти цитируемый пост)

но все равно ошибка "Parsing error" 

На сколько я понял это Managed JScript. Дело в том, что этот язык поддерживает процедурный стиль , а C# - нет. То есть в шарпе нельзя просто объявить инструкции импорта пространств и сразу процедуру. Нужен какой-то класс, пространство имён и всё такое.
Код

using UnityEngine;  
using System.Collections;  
using UnityEditor;  
using System.IO;
public class Program
{ 
Rigidbody projectile;
int speed = 20; 

public static void Launcher 
   {  
         if(Input.GetButtonDown( "Fire1" ) )  
           {  
             int speed = 20;  
                   Rigidbody instantiatedProjectile =   
                   Instantiate(projectile, transform.position, transform.rotation );  
                   instantiatedProjectile.velocity = transform.TransformDirection(new Vector3( 0, 0, speed ) );   
                   Physics.IgnoreCollision(instantiatedProjectile. collider, transform.root.collider );  
           } 
     } 
}
Вот как-то так

Добавлено через 54 секунды
Да, последний твой пост не осили(многа букаф), так что если что - извиняйте smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Stas96
Дата 12.11.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



 Не помогло smile  smile  smile 
PM MAIL   Вверх
diadiavova
Дата 12.11.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Stas96 @  12.11.2009,  16:12 Найти цитируемый пост)
 Не помогло

А что пишет? То же самое?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
KelTron
Дата 12.11.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот это непонять что:
Код

public static void Launcher 
   {


Видимо должен быть метод:
Код

public static void Launcher() 
   {



--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
diadiavova
Дата 12.11.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Да, кстати заметил, что там в объявлении метода скобок нет
Код

public static void Launcher ()


Добавлено через 2 минуты и 25 секунд
А почему в оригинальном коде метод называется Update, а в переведённом у него другое имя?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Stas96
Дата 12.11.2009, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



Была ошибка на"using UnityEditor; "я его убрал и вот ошибка 3 ошибки:
The name "instantiate "does not exit in the current context
The name "transform "does not exit in the current context
The name "transform "does not exit in the current context


Это сообщение отредактировал(а) Stas96 - 12.11.2009, 16:46
PM MAIL   Вверх
diadiavova
Дата 12.11.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Ещё один момент. В оригинальном коде переменные объявляются за пределами функции, я так и сделал, а у тебя в коде переменные с такими же именами объявлены в методе. Они затеняют одноимённые поля
Код

using UnityEngine;  
using System.Collections;  
using UnityEditor;  
using System.IO;
public class Program
{ 
    Rigidbody projectile;
    int speed = 20; 
    public static void Launcher() 
    {  
         if(Input.GetButtonDown( "Fire1" ) )  
           {  
                   Rigidbody instantiatedProjectile =   
                   Instantiate(projectile, transform.position, transform.rotation );  
                   instantiatedProjectile.velocity = transform.TransformDirection(new Vector3( 0, 0, speed ) );   
                   Physics.IgnoreCollision(instantiatedProjectile. collider, transform.root.collider );  
           } 
     } 
}


Цитата(Stas96 @  12.11.2009,  16:45 Найти цитируемый пост)
Была ошибка на"using UnityEditor; "я его убрал и вот ошибка 3 ошибки:
The name "instantiate "does not exit in the current context
The name "transform "does not exit in the current context
The name "transform "does not exit in the current context

Ну это естественно, если эти типы объявлены в данном пространстве имён, а ты убрал инструкцию импорта, то всё закономерно. Если была ошибка на using UnityEditor;, то видимо надо было подключить к проекту соответствующую библиотеку. Хотя "ошибка" - понятие растяжимое. У тебя что надо всё по слову вытягивать?

Это сообщение отредактировал(а) diadiavova - 12.11.2009, 16:56


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Stas96
Дата 12.11.2009, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 13.9.2009
Где: Дом

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



diadiavova
Скопировал код в твоем последнем посте  Ругается:
The type or namespace name "UintyEditor" could not be found.Are you missing a using directive or an assembly reference? не знаю че делать.
PM MAIL   Вверх
diadiavova
Дата 12.11.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(Stas96 @  12.11.2009,  17:37 Найти цитируемый пост)
не знаю че делать. 

Он пишет, что такой тип или пространство имён ему неизвестно и спрашивает, подключил ли ты к проекту библиотеку. Собственно то, что я и предположил в предыдущем посте. Либо не подключена нужная бибилиотека, которая содержит это пространство имён, либо ты просто неправильно написал имя пространства, например егонадо было писать полностью, включая пространства верхнего уровня, а ты просто написал краткое имя. Мне трудно сказать что-то более конкретное, поскольку я понятия не имею, что это за библиотека.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




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


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

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