| 
				
				ДеЦЦкий сад "ПандЁнок"
				 | 
 | 
| 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  |  
|   | 
 |    |