Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
4 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 43
1

Передать методу значения

04.03.2014, 16:02. Показов 1163. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Тут такое дело, взял кусочек готового рабочего кода, он осуществляет передвижение в игре и передаёт всем игрокам позицию куда ты переместился, работает всё ровно, кроме одного но!: перемещает он кубики-персонажи - по глобальным координатам, а не "туда куда смотрит игрок" (я об этом уже писал в другой теме когда то, но тогда я на это забил, сейчас вновь вернулся к вопросу).
Так вот дело в том, что я нашёл как заставить игрока двигаться в сторону куда он смотрит, НО!: теперь нужно разослать информацию другим игрокам.
Готовый и рабочий код есть, вот только вопрос как методу Move передать те координаты на которые мы переместились?


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
        public Player localPlayer { get; set; }            // запоминание нашего игрока
        private float Step = 3f;                                           // скорость игрока   
        private Transform thisTransform;
        
        private Vector3 oldPosition { get; set; }                   // старая позиция
        private const float SendRate = 0.05f;                       // как часто отправляется инфа
        private float lastSendTime = 0;                               // время последней отправки  
 
// разные проверки, нахождение нашего юзверя и отделение от остальных (тут всё работает и к делу код не относится, я его опущу
 
private void InputUpdate()
        {
            if (Input.GetKey(KeyCode.A))
            {
                thisTransform.Translate(-Step*Time.deltaTime, 0, 0);
            }
            else if (Input.GetKey(KeyCode.D))
            {
                thisTransform.Translate(Step * Time.deltaTime, 0, 0);
            }
            else if (Input.GetKey(KeyCode.W))
            {
                thisTransform.Translate(0, 0, Step * Time.deltaTime);
            }
            else if (Input.GetKey(KeyCode.S))
            {
                thisTransform.Translate(0, 0, -Step*Time.deltaTime);
            }
            else if (Input.GetKey(KeyCode.Space))
            {
                //Move(0, Step, 0);
            }
 
        }
 
        private void Move ()                                                //вот сюда как передать коор-ты  меня интересует
        {
            
            if (localPlayer != null)                                                                             
                localPlayer.Position += new Vector3(x, y, z) * Time.fixedDeltaTime;            
                
        }
 
        private void TrySend()                                                                                          
        {
            if (localPlayer.Position != oldPosition && lastSendTime < Time.time)                             
            {
                oldPosition = localPlayer.Position;                                                                      
                lastSendTime = Time.time + SendRate;                                                              
 
                PhotonServer.Instance.MoveOperation(oldPosition.x, oldPosition.y, oldPosition.z);       
            }

Поясню ещё раз:
До редактирования кода в методе InputUpdate() передвижение осуществлялось с помощью след кода:
C#
1
2
3
4
5
6
7
            if (Input.GetKey(KeyCode.A))
            {
                Move(-Step, 0, 0);
 
                       ....
 
            }
Т.е. значения координат сразу передавались в метод move и далее всё нормально работало (но вот только передвижение было по глобал коор-м), сейчас как видите я изменил код:
добавил private Transform thisTransform;
и сделал передвижение по локальным координатам, но вот как вернуть трансляцию в сеть - передачу координат в метод move - я не знаю.

Не по теме:

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

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2014, 16:02
Ответы с готовыми решениями:

Как передать методу коллекции
Как предать методу Коллекции. public static string Vuvod(ArrayList o, ArrayList p) { int...

Передать переменные методу File.AppendAllText
Как записать вместо Text переменные. Например System.IO.File.AppendAllText(&quot;C:\\Passwords.txt&quot;, a...

Запуская поток передать параметры методу
Всем привет.Помогите реализовать это: код нерабоатет потому что поток не могут передавать...

Как передать методу строку матрицы
У меня есть метод для сортировки, но я хочу отсортировать одну строку из матрицы. Как мне правильно...

8
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
04.03.2014, 16:28 2
Не просто сходу разобраться в чужом коде, но на вопрос:
как методу Move передать те координаты на которые мы переместились?

Могу ответить:
Тебе нужно изменить метод Move()
на
C#
1
private void Move (double x, int step, double y)
и дальше уже используй x, step,y в этом методе как тебе угодно - прибавляй к координатам и т.д. и т.п.
В скобках это передаваемые параметры (double, int - это типы передаваемых значений, возможно у тебя все int'ы), а кстати void - это значит, что метод ничего не возвращает, но тебе вроде не нужно ничего от метода получать
0
4 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 43
04.03.2014, 16:44  [ТС] 3
мне нужно из метода thisTransform.Translate(float x, float y, float z)
передать значения x, y, z в метод Move (float x, float y, float z)
0
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
04.03.2014, 16:49 4
Цитата Сообщение от Johnnyk4 Посмотреть сообщение
мне нужно из метода thisTransform.Translate(float x, float y, float z)
передать значения x, y, z в метод Move (float x, float y, float z)
В теле метода thisTransform.Translate(float x, float y, float z) вызови метод Move(x, y, z) когда тебе нужно..
0
4 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 43
04.03.2014, 17:08  [ТС] 5
а по другому можно? просто не желательно затрагивать тело thisTransform.Translate(float x, float y, float z)
0
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
04.03.2014, 17:14 6
при вызове thisTransform.Translate(float x, float y, float z) x,y,z - это глобальные переменные?
А какие нужно передать в Move()? - эти же переменные, после переработки их в thisTransform.Translate ?
0
4 / 4 / 0
Регистрация: 11.04.2012
Сообщений: 43
04.03.2014, 17:18  [ТС] 7
да глобальные, да после переработки

Добавлено через 55 секунд
хотя нет, не глобальные, но могу сделать глобальными наверное)
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
04.03.2014, 17:41 8
где объявленны переменные x, y, z которые вам надо передать ?
0
217 / 216 / 114
Регистрация: 14.01.2013
Сообщений: 459
04.03.2014, 19:34 9
Цитата Сообщение от Johnnyk4 Посмотреть сообщение
хотя нет, не глобальные, но могу сделать глобальными наверное)
Если сделать их глобальными (объявить в классе, а не в методе), то передавать их будет не обязательно и вот здесь вот
C#
1
localPlayer.Position += new Vector3(x, y, z) * Time.fixedDeltaTime;
Вы будете работать с x,y,z - уже изменёнными, если, конечно, Move() вы вызвали после
C#
1
thisTransform.Translate(x, y, z)
0
04.03.2014, 19:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2014, 19:34
Помогаю со студенческими работами здесь

Передать коллекцию методу через интерфейс
Работаю с ObservableCollection. Разные коллекции содержат разные классы, но эти классы имеют общие...

Как передать значения методу
Есть следующий класс: class graphics { private Box box0 = new Box(); ...

Как передать путь файла методу?
Доброго времени суток! Пишу программу обработка изображений (просто небольшая программа,...

Передать имя типа методу на PowerShell
Всем добра! Я не спец в PowerShell, потому прошу помощи. Пример из мануала: SoftwareContainer...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru