На самом деле достаточно прикрепить корневой узел 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
Вот и управление как в линейке)) А все лишнее связанное с камерой можно грохнуть)
Кстате можно к этому приделать поворот камеры когда чтот нажато по движ курсора(например чтоб пока бежиш кудато, оглядывацца по сторонам), но когда чтот отжимаецца постепенно возвращалось в норм положение...попробую щас сделать)
Добавлено (23.09.2011, 01:06) --------------------------------------------- Обьясните пожалста как сделать анимацию при ходьбе?
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
Здесь придётся потрудиться. Самый простой вариант растянуть изменение какого-то значения во времени - через интервал, но тут проблема в том, что не будет учитываться изменение высоты ландшафта под персонажем во время прыжка - например если ты хочешь запрыгнуть на кочку. Если коротко - тебе придётся вместо того чтобы сразу назначать Z, ввести значение вертикальной скорости и менять с помощью него, а для прыжка просто задавать некоторое положительное значение вертикальной скорости, ну и придётся учитывать изменение вертикальной скорости под действием гравитации. В общем классическая школьная задача про тело брошенное вертикально или под углом к горизонту.
Управление камерой подстроил(выдрал) по ся, но она пока проваливается за текстуры, а вот с прыжком(тож поптался выдрать) совсем плохо: он на месте прыгает видать изза того что там прописано чтото типа гравитации а на неровной мапе - ему плохо...
def jumpUpdate(self,task): highestZ = 0 #for n in range(self.pusher.getNumEntries()): #se=self.pusher.getEntry(n) for i in range(self.nodeGroundHandler.getNumEntries()): entry = self.nodeGroundHandler.getEntry(i) z = entry.getSurfacePoint(render).getZ() if z > highestZ and entry.getIntoNode().getName() == "Cube": highestZ = z
По прыжкам - зря ты пытаешься код кусками дёргать и совмещать, полностью не разобравшись как это работает - только ещё больше путаницы внесёшь. Попробуй сам допилить код, который ты в начале делал. Ну или подожди, может чуть позже отдельный класс-контрол для FPS/TPS персонажа сделаю - давно мысль крутилась.
Добрый вечер. У меня возникла такая проблема. На 8 уроке, я все поменял добавил... Игра запускается гномы ходят... но как только я клацаю мышкой, что бы персонаж пошел игра вылетает с ошибкой ValueError: too many values to unpack И ругается он на файл character.py в строчке act, v = self.waypoints[0] Подскажите как починить