ДеЦЦкий сад "ПандЁнок"
|
|
ninth | Дата: Среда, 06.05.2009, 15:46 | Сообщение # 31 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| По скорости, getElevation, конечно имеет преимущество, однако, как ты заметил, он не сможет работать с мешами, а я в дальнейшем планирую размещать на террайне меш-элементы.
|
|
| |
ninth | Дата: Среда, 13.05.2009, 03:23 | Сообщение # 32 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Урок 5.
|
|
| |
3dmax | Дата: Среда, 13.05.2009, 03:53 | Сообщение # 33 |
Генерал-майор
Группа: Проверенные
Сообщений: 334
Награды: 0
Репутация: 1
Статус: Offline
| То есть персонаж будет бежать туда, куда клацнем мышью?
|
|
| |
ninth | Дата: Среда, 13.05.2009, 11:45 | Сообщение # 34 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Ну да. Пока персонажа у нас нет - для наглядности только печатаем в вывод координаты куда ткнули мышой.
|
|
| |
nuclear_ | Дата: Суббота, 23.05.2009, 14:38 | Сообщение # 35 |
Сержант
Группа: Пользователи
Сообщений: 27
Награды: 0
Репутация: 0
Статус: Offline
| Помогите, что-то так и не работает пикер. В консоль выдает "0",следовательно луч с террайном не сталкивается,но почему и как исправить? Code import direct.directbase.DirectStart from direct.task import Task from direct.actor import Actor from pandac.PandaModules import PortalNode from pandac.PandaModules import CollisionTraverser,CollisionNode from pandac.PandaModules import CollisionHandlerQueue,CollisionRay from pandac.PandaModules import Point3,Vec3,Vec4,BitMask32
env = loader.loadModel("models/environment") env.reparentTo(render) env.setScale(0.25,0.25,0.25) env.setPos(-8,42,0) env.node().setIntoCollideMask(BitMask32.bit(1))
p anda = loader.loadModel("models/box") panda.setScale(2,2,2) panda.reparentTo(render) panda.node().setIntoCollideMask(BitMask32.bit(1)) picker = CollisionTraverser() #Make a traverser pq = CollisionHandlerQueue() #Make a handler #Make a collision node for our picker ray pickerNode = CollisionNode('mouseRay') #Attach that node to the camera since the ray will need to be positioned #relative to it pickerNP = base.camera.attachNewNode(pickerNode) #Everything to be picked will use bit 1. This way if we were doing other #collision we could seperate it pickerNode.setFromCollideMask(BitMask32.bit(1)) pickerNode.setIntoCollideMask(BitMask32.allOff()) pickerRay = CollisionRay() #Make our ray pickerNode.addSolid(pickerRay) #Add it to the collision node #Register the ray as something that can cause collisions picker.addCollider(pickerNP, pq) def mouseTask( task): if base.mouseWatcherNode.hasMouse(): mpos = base.mouseWatcherNode.getMouse() pickerRay.setFromLens(base.camNode, mpos.getX(), mpos.getY()) picker.traverse(env) print pq.getNumEntries() for i in xrange(pq.getNumEntries()): pos=pq.getEntry(i).getSurfacePoint(render) panda.setPos(pos) return Task.cont mouseTask = taskMgr.add(mouseTask, 'mouseTask') run()
|
|
| |
ninth | Дата: Суббота, 23.05.2009, 15:35 | Сообщение # 36 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Вместо env.node().setIntoCollideMask(BitMask32.bit(1)) используй Code nodes=env.findAllMatches('**/+GeomNode') for n in nodes.asList(): n.node().setIntoCollideMask(BitMask32.bit(1)) дело в том, что загружаемая карта содержит кучу узлов, а ты обращаешься только к корневому, поэтому мы ищем все узлы, являющиеся геометрией и устанавливаем маску для них. Структуру можно напечатать в вывод, выполнив env.ls()
|
|
| |
A-o-d | Дата: Суббота, 27.06.2009, 15:19 | Сообщение # 37 |
Рядовой
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 0
Статус: Offline
| Блин, у меня чего-то не хочет работать control. переписал код, а при запуске говорит что не назначена глобальная vDir. И в location пара строк не пашет... закоментил их стало запускатся. ninth, можно у тебя исходники попросить этих 3х уроков?
|
|
| |
ninth | Дата: Понедельник, 29.06.2009, 02:48 | Сообщение # 38 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Держи, только здесь уже с изменениями - с кодом последнего невывешенного урока - сейчас "немного завал", поэтому не могу уделить время непосредственно описательной части, надеюсь через недельку - полторы немного разгребусь.
|
|
| |
FertoVordalastr | Дата: Понедельник, 29.06.2009, 05:47 | Сообщение # 39 |
Сержант
Группа: Пользователи
Сообщений: 28
Награды: 0
Репутация: 0
Статус: Offline
| запустил твой код. ругается, на ошибку Code gnodes=self.terrain.getRoot().findAllMatches("+GeomNode") for gnode in gnodes: gnode.node().setIntoCollideMask(BitMask32.bit(1)) говорит, что NodePathCollection не итерабелен вот тут вот: список объявляется без всяких скобок? или метод findAllMatches должен вернуть список?
Сообщение отредактировал FertoVordalastr - Понедельник, 29.06.2009, 05:53 |
|
| |
ninth | Дата: Понедельник, 29.06.2009, 08:03 | Сообщение # 40 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| ммм.. в новой версии панды сделали NodePathCollection итерабельной. В старой версии этот код должен выглядеть так for gnode in gnodes.asList():
|
|
| |
FertoVordalastr | Дата: Понедельник, 29.06.2009, 09:09 | Сообщение # 41 |
Сержант
Группа: Пользователи
Сообщений: 28
Награды: 0
Репутация: 0
Статус: Offline
| ясен... спс ))) потестил - все круто. ninth, ты пока разгребаешься там, я может пока попробую класс на игрока и инвентарь написать. может и получиться.
|
|
| |
A-o-d | Дата: Понедельник, 29.06.2009, 19:07 | Сообщение # 42 |
Рядовой
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 0
Статус: Offline
| Клёво ))) Нашёл свои ошибки, спасибо Добавлено (29.06.2009, 19:07) --------------------------------------------- Кстати, гном переодически проваливается под ланшавт. А как привязать камеру к гному, читобы вокруг него вращалась?
|
|
| |
ninth | Дата: Понедельник, 29.06.2009, 21:17 | Сообщение # 43 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Странно, а закономерность есть? Скрин можно? Нужно убрать обработку перемещения камеры при подведении мыши краю экрана и прикрепить J1 к root персонажа.
|
|
| |
A-o-d | Дата: Понедельник, 29.06.2009, 21:49 | Сообщение # 44 |
Рядовой
Группа: Пользователи
Сообщений: 13
Награды: 0
Репутация: 0
Статус: Offline
| Скрин прилолжил. Теперь расскажу как такого добится ))) Выбираем самую высокую вершину и засылаем туда гнома, пока он в пути, выкручиваем колёсико мыши отдаляя локацию. Когда происходит удаление, панда уменьшает детализацию рельефа. Я так понимаю моделью гнома это воспринимается как перемещение по ровной плоскости, когда он добирается до точки назначения, приближаем поверхность. Вуаля, у нас отрисовался полный рельеф, а гном собственно остался в другой плоскости. Вобщем это видимо баг самой панды. Думаю нужно поставить ограничение на отдаление камеры...
Сообщение отредактировал A-o-d - Понедельник, 29.06.2009, 21:51 |
|
| |
FertoVordalastr | Дата: Вторник, 30.06.2009, 06:00 | Сообщение # 45 |
Сержант
Группа: Пользователи
Сообщений: 28
Награды: 0
Репутация: 0
Статус: Offline
| у нас есть тестер ))) круто ) предлагаю повесить событие на колесо мыши с обновлением координаты высоты гнома. не придется тогда заниматься глупостями типа: записывать координату куды нить. ломать голову с ЛОДом или ограничивать прокрутку.
Сообщение отредактировал FertoVordalastr - Вторник, 30.06.2009, 06:01 |
|
| |