[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 3«123»
Форум Panda3D - по русски » Panda3D » Примеры кода » Пример FPS
Пример FPS
Dimon3DДата: Пятница, 13.02.2009, 16:16 | Сообщение # 16
Полковник
Группа: Проверенные
Сообщений: 200
Награды: 1
Репутация: 4
Статус: Offline
А точка контакта там разве одна?
 
ninthДата: Пятница, 13.02.2009, 16:38 | Сообщение # 17
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
да, для упрощения считается одна точка контакта, это же не полноценная физика
 
Dimon3DДата: Пятница, 13.02.2009, 16:50 | Сообщение # 18
Полковник
Группа: Проверенные
Сообщений: 200
Награды: 1
Репутация: 4
Статус: Offline
а можно получать иформацию о вхождения(entry) не из самого файла модели, а из ее определения в программе
 
ninthДата: Пятница, 13.02.2009, 16:52 | Сообщение # 19
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
в смысле? Не понял вопроса...
 
Dimon3DДата: Пятница, 13.02.2009, 16:55 | Сообщение # 20
Полковник
Группа: Проверенные
Сообщений: 200
Награды: 1
Репутация: 4
Статус: Offline
"if z > highestZ and entry.getIntoNode().getName() == "Cube":
Это, что-бы определить объект столкновения, нужно слазить в файл модели (в данном случае 'Level'), и найти там нужную группу вертексов ("Cube")? Да уж..."

не могу сообразить как цитировать

 
ninthДата: Пятница, 13.02.2009, 17:00 | Сообщение # 21
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
Quote (Dimon3D)
не могу сообразить как цитировать

ты про это или про это:
Code
if z > highestZ and entry.getIntoNode().getName() == "Cube":
? )

Можно назначить тег обекту и потом проверять его - посмортри мой пример про ОДЕ с пинабельными кубиками - модуль MousePicker

 
Dimon3DДата: Пятница, 13.02.2009, 17:08 | Сообщение # 22
Полковник
Группа: Проверенные
Сообщений: 200
Награды: 1
Репутация: 4
Статус: Offline
Про то и про другое. Про второе понял, посмотрю. Про первое нет. Как цитировать ?
 
ninthДата: Пятница, 13.02.2009, 19:15 | Сообщение # 23
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
Выделяешь нужный кусок и щёлкаешь quote внизу сообщения - это для цитирования, для оформления кода - специальный тег code - смотри список над полем в котором сообщение пишешь
 
Dimon3DДата: Суббота, 14.02.2009, 10:31 | Сообщение # 24
Полковник
Группа: Проверенные
Сообщений: 200
Награды: 1
Репутация: 4
Статус: Offline
Щас ваще не понятно!!! Пытаюсь вывести инфу по координате z, точки пересечения луча с Levelом, и все время вижу одно и то же ругательство:

self.textNode.setText(text)
AttributeError: 'libpanda.PandaNode' object has no attribute 'setText'

Последний вариант кода через глобальные переменные (Синим-мои изменения):

import direct.directbase.DirectStart
from direct.showbase.DirectObject import DirectObject
from pandac.PandaModules import *
from direct.gui.OnscreenText import OnscreenText
from direct.gui.DirectGui import *
import sys

gz=0

class DevInfo(DirectObject):
def __init__(self):
self.textObj=OnscreenText(text='0', style=1, fg=(1,1,1,1),
pos=(1.3,-0.95), align=TextNode.ARight, scale = .07)
taskMgr.add(self.updateInfo, 'info-task')

def updateInfo(self,task):
global gz
self.textObj.setText(str(gz))
return task.cont

class FPS(object):
........
........

def jumpUpdate(self,task):
global gz
""" this task simulates gravity and makes the player jump """
# get the highest Z from the down casting ray
highestZ = -100
for i in range(self.nodeGroundHandler.getNumEntries()):
entry = self.nodeGroundHandler.getEntry(i)
z = entry.getSurfacePoint(render).getZ()
gz=z
if z > highestZ and entry.getIntoNode().getName() == "Cube":
highestZ = z
# gravity effects and jumps
self.node.setZ(self.node.getZ()+self.jump*globalClock.getDt())
self.jump -= 6*globalClock.getDt()
if highestZ > self.node.getZ()-.6:
self.jump = 0
self.node.setZ(highestZ+.6)
if self.readyToJump:
self.jump = 1
return task.cont

FPS()
DevInfo()
run()

Добавлено (14.02.2009, 08:05)
---------------------------------------------
Все. Дошло, все работает. Надо использовать textNode, а не OnscreenText

Добавлено (14.02.2009, 10:18)
---------------------------------------------
А как сделать, чтоб player не парил в воздухе, при движении вперед/назад, когда он не на "земле" стоит

Добавлено (14.02.2009, 10:31)
---------------------------------------------
И вот, после того как я вывел нужную мне информацию таким от образом:

def jumpUpdate(self,task):
""" this task simulates gravity and makes the player jump """
# get the highest Z from the down casting ray
highestZ = -100
for i in range(self.nodeGroundHandler.getNumEntries()):
entry = self.nodeGroundHandler.getEntry(i)
z = entry.getSurfacePoint(render).getZ()
self.devInfo.setText('nodeZ='+str(self.node.getZ())+' z='+str(z))

if z > highestZ and entry.getIntoNode().getName() == "Cube":
highestZ = z
self.devInfo1.setText('hz='+str(highestZ)+' '+str(entry))

# gravity effects and jumps
self.node.setZ(self.node.getZ()+self.jump*globalClock.getDt())
self.jump -= 6*globalClock.getDt()
if highestZ > self.node.getZ()-0.6:
self.jump = 0
self.node.setZ(highestZ+0.6)
if self.readyToJump:
self.jump = 1
return task.cont

я ума не приложу, каким образом z может отличаться от highestZ

 
Dimon3DДата: Воскресенье, 15.02.2009, 11:09 | Сообщение # 25
Полковник
Группа: Проверенные
Сообщений: 200
Награды: 1
Репутация: 4
Статус: Offline
Чуть не забыл:

Добавлено (14.02.2009, 11:16)
---------------------------------------------
Если луч одновременно коллидится и со сферой и с levelом, а выбор нужного объекта идет командой entry.getIntoNode().getName(), то зачем тогда вообще нужен BitMask32

Добавлено (15.02.2009, 11:09)
---------------------------------------------
Попытался загрузить свою карту в этот пример. Карта отображается, но player на нее не реагирует, пролетает насквозь. Сравнил файлы. Структура файлов отличается. В окне экспортера никаких опций про добавление коллизий нет. Значит беру и в своем файле, в начале описания группы добавляю это:
<Group> Cube {
<Collide> { Polyset keep descend }
......
Все работает.
Мало ли, а то мож кто еще попадется

Прикрепления: 7332910.jpg(32Kb)
 
ninthДата: Понедельник, 16.02.2009, 02:50 | Сообщение # 26
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
нафлудил ))
1. Добавь скорости падения
2. Луч детектит все полигоны какие пересекает не останавливаясь на первом, поэтому ищется ближайший
3. Битмаск позволяет отсечь ненужные проверки, эт хорошо если у тебя один луч, одна сфера и одна геометрия для уровня, а если у тебя пара сотен юнитов?
4. Не обязательно - опять отсылаю к примеру с оде и встроенными коллизиями панды + по этому случаю перевёл мануал про поиск в сцене объектов.
 
Dimon3DДата: Понедельник, 16.02.2009, 05:34 | Сообщение # 27
Полковник
Группа: Проверенные
Сообщений: 200
Награды: 1
Репутация: 4
Статус: Offline
ОК. Постараюсь быть поскромнее
1. Сначала player скачет по наклонным. При дальнейшем увеличении с.п. гравитация становится не реальной
2. 3. Ясно
4. Все забываю посмотреть
 
ninthДата: Понедельник, 16.02.2009, 07:33 | Сообщение # 28
Admin
Группа: Администраторы
Сообщений: 1555
Награды: 5
Репутация: 46
Статус: Offline
Да я шучу) Правильно делаешь, что сам ищешь ответы на вопросы и выкладываешь что нашёл.
Ну, тут уже траблы алгоритма реализации. Надо думать как его решить. Можно попробовать получать нормаль к поверхности под игроком и смещать не прямо, а с учётом этой нормали.
 
designerДата: Среда, 10.02.2010, 10:41 | Сообщение # 29
Майор
Группа: Пользователи
Сообщений: 90
Награды: 0
Репутация: 0
Статус: Offline
А если скажем делать FPS-RTS (с переключением камеры от первого лица на камеру над полем боя), как следует управлять камерами?

...игры взрастили человеческую цивилизацию...

Сообщение отредактировал designer - Среда, 10.02.2010, 10:43
 
BlackCatДата: Среда, 10.02.2010, 19:46 | Сообщение # 30
Подполковник
Группа: Проверенные
Сообщений: 144
Награды: 0
Репутация: 1
Статус: Offline
Хм, мне видится добавление сразу двух камер, только одна отключается и включается в тот момент, когда нужна. Соответственно первая отключается. Как-то так.

http://alphahole.do.am - версия 0.015 вышла 22.02.10
 
Форум Panda3D - по русски » Panda3D » Примеры кода » Пример FPS
Страница 2 из 3«123»
Поиск: