ДеЦЦкий сад "ПандЁнок"
|
|
ninth | Дата: Среда, 21.03.2012, 10:07 | Сообщение # 256 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Хм. А ты все состояния ему проставил? Попробуй простой тест. У меня всё как положено работает. Code from direct.directbase.DirectStart import * from pandac.PandaModules import *
nps = []
for i in xrange(4): tn = TextNode('tn'+str(i)) tn.setText('button'+str(i)) tn.setTextColor(0, 0, 0, 1) tn.setCardColor(1, 1, 0.5, 1) tn.setCardAsMargin(0.2, 0.2, 0.2, 0.2) nps.append(NodePath(tn.generate()))
btn = PGButton('my_btn') btn.setup(nps[0], nps[1], nps[2], nps[3]) bn = aspect2d.attachNewNode(btn) bn.setScale(0.2)
run()
|
|
| |
Kornival | Дата: Среда, 21.03.2012, 14:10 | Сообщение # 257 |
Лейтенант
Группа: Пользователи
Сообщений: 40
Награды: 0
Репутация: 1
Статус: Offline
| Quote (ninth) А ты все состояния ему проставил? На сишном АПИ используется стили(PGFrameStyle), и я для всех состояний выставил один и тот же стиль. При наведении курсора текст, нарисованный на кнопке съезжает чуть вниз и вправо, красиво получается. Если нажать на кнопку и снова навести курсор, то текст уже не съезжает. Наверное придется для разных состояний ставить разные стили.
|
|
| |
Aslan0 | Дата: Среда, 09.05.2012, 22:37 | Сообщение # 258 |
Рядовой
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
| мне надо сделать так чтобы через время X выполнилась команда Y ()
|
|
| |
serg-kkz | Дата: Четверг, 10.05.2012, 09:28 | Сообщение # 259 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Quote (Aslan0) мне надо сделать так чтобы через время X выполнилась команда Y () А причем тут эта тема? Такие вопросы лучше задавать в разделе Python
Решение:
Code import direct.directbase.DirectStart
def Y(task): print '5 sec' taskMgr.doMethodLater(5, Y, "timer")
run()
ООП -
|
|
| |
Aslan0 | Дата: Пятница, 11.05.2012, 21:27 | Сообщение # 260 |
Рядовой
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
| Quote А причем тут эта тема? Такие вопросы лучше задавать в разделе ну мне казалось время это функция движка , но ладно есть ещё вопрос . теперь надо сделать так что бы после нажатия enter выполнилась команда x . честно говоря я читал статью о работе с клавиатурой http://panda3d.org.ru/publ/1-1-0-18 , но появились вопросы с этой частью кода Code myDirectObject.accept('Event Name',myDirectObjectMethod) правда это из статьи про события http://panda3d.org.ru/publ/1-1-0-14 , но как я понял код выше надо обязательно запускать для обработки события ? И спасибо serg-kkz за разъяснение на счёт времени .
|
|
| |
serg-kkz | Дата: Пятница, 11.05.2012, 22:55 | Сообщение # 261 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Может это поймешь
Code import direct.directbase.DirectStart
def X(): print 'input enter' base.accept('enter',X)
run()
Где 'enter' имя события кнопки, если подставить 'space' будет выполняться по пробелу.
Вот имена клавиш: "escape", "f"+"1-12" (e.g. "f1","f2",..."f12"), "print_screen" "scroll_lock" "backspace", "insert", "home", "page_up", "num_lock" "tab", "delete", "end", "page_down" "caps_lock", "enter", "arrow_left", "arrow_up", "arrow_down", "arrow_right" "shift", "lshift", "rshift", "control", "alt", "lcontrol", "lalt", "space", "ralt", "rcontrol"
ООП -
|
|
| |
Aslan0 | Дата: Пятница, 11.05.2012, 23:29 | Сообщение # 262 |
Рядовой
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 0
Статус: Offline
| Quote (serg-kkz) Может это поймешь
view plainprint? import direct.directbase.DirectStart
def X(): print 'input enter'
base.accept('enter',X)
run()
Где 'enter' имя события кнопки, если подставить 'space' будет выполняться по пробелу.
Вот имена клавиш: "escape", "f"+"1-12" (e.g. "f1","f2",..."f12"), "print_screen" "scroll_lock" "backspace", "insert", "home", "page_up", "num_lock" "tab", "delete", "end", "page_down" "caps_lock", "enter", "arrow_left", "arrow_up", "arrow_down", "arrow_right" "shift", "lshift", "rshift", "control", "alt", "lcontrol", "lalt", "space", "ralt", "rcontrol" оказывается мой код работал , я неправильно дал путь к изображению , забыл s в слове models , я думал что у меня в коде что то неправильно . ну основные вопросы исчерпаны . ну пойду наделаю ещё гору ошибок а потом буду разбирать
Сообщение отредактировал Aslan0 - Пятница, 11.05.2012, 23:33 |
|
| |
pup | Дата: Вторник, 22.01.2013, 09:24 | Сообщение # 263 |
Рядовой
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Статус: Offline
| Народ, подскажите плз как по другому считать местоположение гнома от точки а до точки б не используя его смещение относительно своих координат по оси У ?
|
|
| |
ninth | Дата: Вторник, 22.01.2013, 09:54 | Сообщение # 264 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Не совсем понял вопрос - как понимать местоположение от точки а до точки б? Нужно расстояние между точками или нужно ставить гнома в конкретную точку или какой-то иной способ перемещения? Или что вообще имелось ввиду?
|
|
| |
pup | Дата: Вторник, 22.01.2013, 10:01 | Сообщение # 265 |
Рядовой
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Статус: Offline
| В данный момент гном перемещаеться смещаясь относительно своих координат. Как сделать чтоб он с конкретной точки в которой находиться смещался постепенно в ту которую я в вейпоинте задаю. Короче чтоб координаты в update'е расчитывались и он двигался
|
|
| |
ninth | Дата: Вторник, 22.01.2013, 10:20 | Сообщение # 266 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Можешь задать интервалом, как в примере Hello World, но тут есть проблема - не будет учитываться высота. Можешь построить mopath и двигать через MopathInterval, но тут придётся считать саму кривую так чтобы она огибала неровности рельефа. Ну а если двигать в апдейте, то нужно задать начальную точку, конечную точку, время за которое он должен переместиться из начальной в конечную, текущее время, а дальше считать примерно так: Код currentTime += globalClock.getDt() dir = b - a pos = a + dir * currentTime / duration pos.setZ(height)
currentTime - счётчик текущего времени. Должен обнуляться когда ты отправляешь своего персонажа из а в б duration - общее время за которое должно произойти перемещение a и b - соотв. начальная и конечная точки dir - вектор направленный из начальной точки в конечную. Чтобы получить положение персонажа в данный момент времени мы умножаем этот вектор на долю прошедшего времени от общего требуемого на перемещение и прибавляем к начальной точке и затем меняем высоту (Z) с учётом местности
Общее время требуемое на перемещение у тебя скорее всего должно будет зависеть от расстояния. Расстояние между двумя точками можно посчитать так (b - a).length() либо (b - a).lengthSquared(). Во втором случае - квадрат расстояния считается немного быстрее - актуально если будет выполняться много подсчётов каждый фрейм.
|
|
| |
pup | Дата: Вторник, 22.01.2013, 11:42 | Сообщение # 267 |
Рядовой
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Статус: Offline
| Спасибо. щас попробую Добавлено (22.01.2013, 11:42) --------------------------------------------- чтото не получается
Код def control(self,action,param): if action is 'add_wp': self.waypoints.append(Vec3(param[0],param[1],0)) elif action is 'replace_wp': self.currentTime = 0 self.currentTime += globalClock.getDt() self.a = Vec3(self.root.getPos()) self.waypoints=[] self.waypoints.append(Vec3(param[0],param[1],0)) self.v=self.waypoints[0] self.v.setZ(self.root.getZ()) self.v=Vec3(self.v-self.root.getPos()) if self.v.length()<0.3: del self.waypoints[0] else: self.duration = self.v/2 def update(self,task): if len(self.waypoints)>0: v=self.waypoints[0] v.setZ(self.root.getZ()) v=Vec3(v-self.root.getPos()) if v.length()<0.3: del self.waypoints[0] else: self.v.normalize() print self.v,self.a self.root.setPos(self.a+self.v*(self.currentTime/self.duration)) ругается на эту строку self.root.setPos(self.a+self.v*(self.currentTime/self.duration)) unsupported operant type(s) for /: 'float' and 'libpanda.Vec3'
|
|
| |
k0t | Дата: Вторник, 22.01.2013, 14:33 | Сообщение # 268 |
Подполковник
Группа: Пользователи
Сообщений: 104
Награды: 0
Репутация: 4
Статус: Offline
| У тебя self.duration является вектором ( self.v=Vec3(self.v-self.root.getPos()) ; self.duration = self.v/2 ) На вектор делить нельзя )
|
|
| |
pup | Дата: Вторник, 22.01.2013, 14:45 | Сообщение # 269 |
Рядовой
Группа: Пользователи
Сообщений: 15
Награды: 0
Репутация: 0
Статус: Offline
| я уже и по отдельности делил координаты self.durationx = self.v[0]/2 self.durationy = self.v[1]/2 и по отдельности считал для х и игрика... дёргаеться как инвалид куда не нажми и перескакивает на другое место. причем постоянно в одном направлении
|
|
| |
ninth | Дата: Вторник, 22.01.2013, 14:58 | Сообщение # 270 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| v=Vec3(v-self.root.getPos()) замени на v=Vec3(v-self.a) self.currentTime += globalClock.getDt() должно быть в апдейте с duration у тебя действительно что-то непонятное. Каким образом у тебя время от конечной позиции зависит? По - идее должно зависеть от расстояния а не от конечной точки.
Может лучше объяснишь чего ты хочешь добиться в итоге, а мы попробуем подсказать?
|
|
| |