[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Форум Panda3D - по русски » Panda3D » Для начинающих » ДеЦЦкий сад "ПандЁнок"
ДеЦЦкий сад "ПандЁнок"
3BiPДата: Среда, 21.09.2011, 21:06 | Сообщение # 181
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Огромное спс! Пойду дальше проходить уроки!

Добавлено (21.09.2011, 21:06)
---------------------------------------------
Подскажите пожалуйста как прикрепить камеру к гному которым мы управляем?



 
serg-kkzДата: Среда, 21.09.2011, 23:50 | Сообщение # 182
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
Quote (3BiP)
Подскажите пожалуйста как прикрепить камеру к гному которым мы управляем?

В уроке №3 изложен этот момент.


ООП  -  
 
3BiPДата: Четверг, 22.09.2011, 21:10 | Сообщение # 183
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Возможно меня неправильно поняли, я попытаюсь объяснить поподробней...
Вот у нас есть объет
Крепим к объекту камеру
Камера двигается за объектом

Был где-то пример:
Code
   root = NodePath('avatar root')
     root.reparentTo(render)
     tmp = loader.loadModel("box")
     #tmp.setColor(1,0,0)
     tmp.reparentTo(root)
     base.camera.reparentTo(root)
     base.camera.setPos(0,-30,10)
     base.camera.lookAt(0,0,5)


Но я не понимаю как применить его тут...



 
serg-kkzДата: Четверг, 22.09.2011, 21:25 | Сообщение # 184
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
3BiP, Ты хочешь просто прицепить к гному, т.е. без вращения?

ООП  -  
 
3BiPДата: Четверг, 22.09.2011, 21:30 | Сообщение # 185
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Да... просто чтоб она на него со спины смотрела и не двигалась, а потом при зажатой(левой) кн. мыши можно было ее вращать вокруг гнома.


 
serg-kkzДата: Четверг, 22.09.2011, 21:37 | Сообщение # 186
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
3BiP, Для этого нужно править модуль "control.py"

ООП  -  
 
ninthДата: Четверг, 22.09.2011, 22:49 | Сообщение # 187
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
На самом деле достаточно прикрепить корневой узел j1 камеры к корневому узлу персонажа - примерно так camera.j1.reparentTo(player.root), установить позицию j1 в 0 и отключить перемещение камеры при подведении мыши к краю карты. Для отключения правда придётся действительно лезть в control.py
за перемещение отвечает этот кусок
Code
                if self.my>0.8:
                     aspect=-(1-self.my-0.2)*5
                     self.j1.setY(self.j1,aspect)
                 if self.my<-0.8:
                     aspect=(1+self.my-0.2)*5
                     self.j1.setY(self.j1,aspect)
                 if self.mx>0.8:
                     aspect=-(1-self.mx-0.2)*5
                     self.j1.setX(self.j1,aspect)
                 if self.mx<-0.8:
                     aspect=(1+self.mx-0.2)*5
                     self.j1.setX(self.j1,aspect)

Да, Ещё возможно придётся перенастроить расстояния между узлами j1, j2, j3
 
3BiPДата: Пятница, 23.09.2011, 01:06 | Сообщение # 188
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
в dragTask вместо
Code
  base.camera.setPos(Vec3(base.camera.getPos())+vDir)
base.camera.lookAt(self.j1.getPos(render))


вполне достаточно:

Code
  base.camera.reparentTo(player.root)
      base.camera.setPos(0,-30,10)
      base.camera.lookAt(0,0,5)

*Вот и нашёл куда всунуть пример указанный выше

Вот и управление как в линейке))
А все лишнее связанное с камерой можно грохнуть)

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

Добавлено (23.09.2011, 01:06)
---------------------------------------------
Обьясните пожалста как сделать анимацию при ходьбе?

сontrol.py:

Code
class keyboardControl(DirectObject):
  def __init__(self):
   self.speed = 0
   self.chvalue = 0
   self.accept("w",self.changeSpeed,[0.1])
   self.accept("w-up",self.changeSpeed,[-0.1])
    
   taskMgr.add(self.controlTask,'control task')
      
  def changeSpeed(self,v):         
   self.chvalue = self.chvalue + v
   if self.chvalue < 0:
    v = 0
    self.chvalue = v
     
  def controlTask(self,task):
   if -1<self.speed<100:
    self.speed += self.chvalue
   self.speed *= 0.99
   player.root.setPos(player.root,0,self.speed*globalClock.getDt(),0)
   return task.cont


main.py:
Code
from modules.control import keyboardControl
...
kpc=keyboardControl()





Сообщение отредактировал 3BiP - Четверг, 22.09.2011, 23:40
 
ninthДата: Пятница, 23.09.2011, 07:25 | Сообщение # 189
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
http://panda3d.org.ru/publ/2-1-0-21
 
3BiPДата: Суббота, 24.09.2011, 21:36 | Сообщение # 190
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Вот есть кнопочное управление(w/a/s/d) с анимацией:
Code
class keyboardControl(DirectObject):
    def __init__(self):
        
     self.lr1 = 0
     self.speed = 0
     self.chvalue = 0
     self.accept("w",self.changeSpeed,[5])
     self.accept("w-up",self.changeSpeed,[0])
     self.accept("s",self.changeSpeed,[-5])
     self.accept("s-up",self.changeSpeed,[0])
     self.accept("a",self.turnlr,[1])
     self.accept("a-up",self.turnlr,[0])
     self.accept("d",self.turnlr,[2])
     self.accept("d-up",self.turnlr,[0])
        
     taskMgr.add(self.controlTask,'control task')
          
    def changeSpeed(self,v):           
     self.speed = v
       
    def turnlr(self, lr):
     self.lr1 = lr    
       
    def controlTask(self,task):
     if self.speed== 5:
      player.state= 'walk'
     if self.speed== -5:
      player.state= 'walk'
     if self.lr1 == 1:
      player.root.setH(player.root.getH() + 100 * globalClock.getDt())
     if self.lr1 == 2:
      player.root.setH(player.root.getH() - 100 * globalClock.getDt())
     player.root.setPos(player.root,0,self.speed*globalClock.getDt(),0)
     return task.cont

*Паралельно можно и идти вперед/назад и пововачиваться)

Это сделано так:
Code
    def changeSpeed(self,v):           
     self.speed = v
       
    def turnlr(self, lr):
     self.lr1 = lr

А не так:
Code
def turnlr(self, lr):
     lr == 1:
      player.root.setH(player.root.getH() + 100 * globalClock.getDt())
     lr == 2:
      player.root.setH(player.root.getH() - 100 * globalClock.getDt())
)
потому что во 2ом случае оно 1 раз поворачивает гнома или если в ходьбе(changeSpeed) то 1 раз "идет")

Добавлено (24.09.2011, 20:40)
---------------------------------------------
Как заставить его прыгать?
Если я пишу player.root.setPos(player.root,0,0,5) то он мгновенно перемещается вверх-вниз(помоему, очень трудно понять). Можно ли как-то замедлить этот процесс?

Добавлено (24.09.2011, 21:36)
---------------------------------------------
Наткнулся на http://panda3d.org.ru/load/1-1-0-13-0-0-0-1316882869 тут интересное мне управление камерой и прыжок есть, только код не очень понятен)
Не сочтите садистом, но кто может напишите описание к коду, пожалуйста....





Сообщение отредактировал 3BiP - Суббота, 24.09.2011, 20:29
 
ninthДата: Воскресенье, 25.09.2011, 11:49 | Сообщение # 191
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
Здесь придётся потрудиться. Самый простой вариант растянуть изменение какого-то значения во времени - через интервал, но тут проблема в том, что не будет учитываться изменение высоты ландшафта под персонажем во время прыжка - например если ты хочешь запрыгнуть на кочку. Если коротко - тебе придётся вместо того чтобы сразу назначать Z, ввести значение вертикальной скорости и менять с помощью него, а для прыжка просто задавать некоторое положительное значение вертикальной скорости, ну и придётся учитывать изменение вертикальной скорости под действием гравитации. В общем классическая школьная задача про тело брошенное вертикально или под углом к горизонту.
 
3BiPДата: Воскресенье, 25.09.2011, 13:55 | Сообщение # 192
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Управление камерой подстроил(выдрал) по ся, но она пока проваливается за текстуры, а вот с прыжком(тож поптался выдрать) совсем плохо: он на месте прыгает видать изза того что там прописано чтото типа гравитации а на неровной мапе - ему плохо...

Пока код вот так выглядит:





Сообщение отредактировал 3BiP - Воскресенье, 25.09.2011, 14:00
 
3BiPДата: Воскресенье, 25.09.2011, 21:33 | Сообщение # 193
Сержант
Группа: Пользователи
Сообщений: 37
Награды: 0
Репутация: 0
Статус: Offline
Подскажите плз как сделать инвентарь открывающийся по наж кнопки?

Или подскажите как его переделать что б он открывался как меню.

* и меню и инвентарь прилогаецца
Прикрепления: 4022281.zip (1.34 Mb) · mainmenu.py (3.3 Kb)



 
ninthДата: Понедельник, 26.09.2011, 15:42 | Сообщение # 194
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
По прыжкам - зря ты пытаешься код кусками дёргать и совмещать, полностью не разобравшись как это работает - только ещё больше путаницы внесёшь. Попробуй сам допилить код, который ты в начале делал. Ну или подожди, может чуть позже отдельный класс-контрол для FPS/TPS персонажа сделаю - давно мысль крутилась.

Инвентарь здесь смотри - http://panda3d.org.ru/forum/5-184-1
Там по нажатию "i" переключается.
 
Rivermacaroon0Дата: Четверг, 13.10.2011, 19:39 | Сообщение # 195
Рядовой
Группа: Пользователи
Сообщений: 8
Награды: 0
Репутация: 0
Статус: Offline
Добрый вечер. У меня возникла такая проблема.
На 8 уроке, я все поменял добавил... Игра запускается гномы ходят... но как только я клацаю мышкой, что бы персонаж пошел игра вылетает с ошибкой ValueError: too many values to unpack
И ругается он на файл character.py в строчке act, v = self.waypoints[0]
Подскажите как починить
 
Форум Panda3D - по русски » Panda3D » Для начинающих » ДеЦЦкий сад "ПандЁнок"
Поиск: