Вопросы по созданию игр.

Список разделов Геймдев в Blender Игровой движок Blender

Описание: Все вопросы и обсуждения, касающиеся BGE
Модераторы: exooman, denis8424

Сообщение #1 exooman » 25.01.2014, 14:45

В этой теме помогаем друг-другу разбираться в игростроении на движке BGE.
Внимание, прежде чем задать вопрос, просмотрите темы:
Blender Game Engine FAQ
Blender Game Engine примеры
Полезные ресурсы по BGE


Пожалуйста, выкладывайте бленд-файлы, изображения и другие ресурсы на сторонних хостингах. Приветствуется упаковывание файлов в архив, желательно в формате .7z. По возможности старайтесь использовать изображения формата .jpeg.
exooman M
Аватара
Сообщения: 1304



Сообщение #1421 andreymal » 18.06.2017, 14:06

Август писал(а):Нажал на клавишу - ничего не происходит.
Ну так просто не пиши никакой код в том месте, где ничего не должно происходить, да и всё, в чём проблема?

Август писал(а):Возможно ли сделать чтобы, к примеру правая клавиша срабатывала на нажатие, а левая на отпуск клавиши, вот я о чём спрашиваю.
Всё абсолютно то же самое, два сенсора и дальше обработка состояний обоих сенсоров всё по тому же примеру https://andreymal.org/files/hello_python/9.png

Ответы на все эти вопросы есть в этой картинке. Если ты не можешь адаптировать код с картинки под свои нужды, значит незамедлительно беги читать любой учебник по питона. Больше тыкать носом в ответы, которые ответили ещё несколько дней назад, я не буду.

Добавлено спустя 13 минут 46 секунд:
Хотя дам ещё один пример, который показывает, как узнать статус сенсора более точно

Изображение

При статусах INACTIVE и ACTIVE скрипт по умолчанию не запускается, скрипт запустится и обработает эти статусы только если у сенсора включен импульсный режим (это кнопки с тремя точечками у сенсора) или скрипт запущен каким-то другим сенсором
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1422 Август » 18.06.2017, 16:08

andreymal писал(а):Хотя дам ещё один пример, который показывает, как узнать статус сенсора более точно
При статусах INACTIVE и ACTIVE скрипт по умолчанию не запускается, скрипт запустится и обработает эти статусы только если у сенсора включен импульсный режим (это кнопки с тремя точечками у сенсора) или скрипт запущен каким-то другим сенсором
А, вот это то, что надо. Коль включить определённое реагирование на состояние кнопки невозможно, то выбор состояния может выручить. Нажал - выделил объект и потащил его по экрану. Отпустил - объект остался там куда его притащил.
Как найду или подскажете причину по которой словарь не наполняется, то очевидно смогу, выделить необходимый куб, и определив его через данные в словаре, перетащить.
Август
Сообщения: 104

Сообщение #1423 andreymal » 18.06.2017, 16:47

Читал-читал код и так и не понял, какого наращивания ты хочешь. У тебя каждый раз создаётся новый словарь и попыток его наращивания я не вижу
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1424 Август » 18.06.2017, 17:08

andreymal писал(а):andreymal » 5 минут назад
Читал-читал код и так и не понял, какого наращивания ты хочешь. У тебя каждый раз создаётся новый словарь и попыток его наращивания я не вижу
Что не так?
Код: Выделить всё
if mouseR.positive:    # если нажата правая клавиша мышки
        if emp['IsCube'] == False:     # если в сцене нет ни одного куба
            Dict = {}            # создать пустой словарь с названием Dict
        ...................
        Dict = {nameCube:p} # ввод ключа и значения из переменных

В случае наличия в сцене хоть одного куба, образование словаря игнорируется.
Где ошибка?
Август
Сообщения: 104

Сообщение #1425 andreymal » 18.06.2017, 17:55

Август писал(а):Dict = {}
Это создание нового словаря
Август писал(а):Dict = {nameCube:p}
Это ТОЖЕ создание нового словаря, старый словарь бесследно уничтожается
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1426 Август » 18.06.2017, 18:40

andreymal писал(а):
Август писал(а):
Dict = {}
Это создание нового словаря
Август писал(а):
Dict = {nameCube:p}
Это ТОЖЕ создание нового словаря, старый словарь бесследно уничтожается
О, как! Ну, и ...? Что сделать-то надо, в квадратных скобках вводить, а не в фигурных как в ссылке https://www.ibm.com/developerworks/ru/library/l-python_part_4/index.html#ibm-pcon что ли? Пробовал - матюгается.
Август
Сообщения: 104

Сообщение #1427 grayich » 18.06.2017, 18:52

Dict = {} нужно написать ДО цикла, тем самым создав единоразово хэш
а потом заносить значения как Dict[nameCube] = p там где нужно
Последний раз редактировалось grayich 18.06.2017, 18:52, всего редактировалось 1 раз.
x64 Linux
grayich M
Аватара
Откуда: Харьков
Сообщения: 4079

Сообщение #1428 andreymal » 18.06.2017, 18:52

Август писал(а):Что сделать-то надо, в квадратных скобках вводить
andreymal писал(а):Синтаксис обращения и обновления значений в словаре:
Код: Выделить всё
имя[выражение] = выражение
Какая буква здесь непонятна?

Добавлено спустя 44 секунды:
grayich писал(а):нужно написать ДО цикла, тем самым создав единоразово хэш
Опережаешь события, до этой проблемы мы ещё не дошли :-D
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1429 Август » 18.06.2017, 20:26

grayich писал(а):Dict = {} нужно написать ДО цикла, тем самым создав единоразово хэш
а потом заносить значения как Dict[nameCube] = p там где нужно
Это код:
Код: Выделить всё
    if mouseR.positive:    # если нажата правая клавиша мышки
        if emp['IsCube'] == False:
            Dict = {}
        print("emp.worldPosition = ", emp.worldPosition)
        newOb = scene.addObject("Cube", emp, 0) # 'Cube' – имя объекта который прибавляется. emp – Центр объекта в который добавляется объект. 0 - время (integer) – Срок жизни добавленного объекта, в кадрах.
        NCube += 1  # наращивание номера куба
        nameCube ='Cube' + str(NCube)   # создание нового наименования куба
        p = id(newOb)       # передача id вновь созданного объекта в переменную
        print("nameCube = ", nameCube)
        print("newOb - ", newOb, " id(newOb) - ", p)                    # смотрим идентификатор свежесозданного объекта
        emp["numCube"] = NCube # передача в свойство пустышки реализованный номер
        Dict = [nameCube]=str(p) # ввод в словарь ключа и значения. int не принял (ошибка: 'int' object is not iterable) попробовал str.
        abc=len(Dict) # передача в переменную длины словаря
        print("abc = ", abc)
        for key, value in Dict.items():
            print(key, value)   # просмотр состава словаря
        xcube = newOb.position[0]   # получить X позицию нового cube
        ycube = newOb.position[1]   # получить Y позицию нового cube
        zcube = newOb.position[2]   # получить Z позицию нового cube
        print("xcube = ", xcube)
        print("ycube = ", ycube)
        print("zcube = ", zcube)
       
        emp['IsCube'] = True # подтверждение что куб в сцене есть
А, это реакция на него:
Изображение
Материт "слишком много значений, чтобы распаковать (ожидал 1)" вот эту строку:
Dict = [nameCube]=str(p) # ввод в словарь ключа и значения. int не принял (ошибка: 'int' object is not iterable) попробовал str.
grayich, уточните, до какого цикла, ведь он только в просмотре словаря, так он и так до него, или я что-то не так понимаю?
Август
Сообщения: 104

Сообщение #1430 andreymal » 18.06.2017, 21:25

Неужели ты не видишь разницы между «Dict = [nameCube]» и «Dict[nameCube]»? :facepalm:
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1431 Levitanus » 19.06.2017, 07:13

Август, я вижу ошибку в синтаксисе.
Второй строкой ты не добавляешь позицию, а меняешь значение.
Опа, а откуда бы оно оттуда взялось? Неоткуда. Первая строка как раз добавляет Ваню и Федю. А вторая строка меняет значение, присвоенное феде.
Питон ни в жисть в глаза не видел.
В твоем случае код должен быть:
if emp ['isCube'] = false...
...
Dict = {'nameCube': p}

Но сделав это, ты тоже получишь фигню, потому что надо сначала назначить p, а для этого надо немного поправить порядок строк, в это лезть уже неохота, надо самому подумать малость ;)

Добавлено спустя 3 минуты:
а. не. можно легше.
Dict = {'nameCube': p} #здесь вместо p должно быть значение типа данных объекта cube, если верить, что остальной код у тебя правильный. Что там за тип данных я хз))
Тогда все остально должно сработать без изменений, но строчку, которая с ошибкой менять и убирать тогда не надо
пишу музыку, примеры тут
Levitanus M
Аватара
Откуда: Новосибирск
Сообщения: 773



  • 2

Сообщение #1432 andreymal » 19.06.2017, 08:33

Август писал(а):покажи на моём коде
Как ты пытался сделать модуль из своего кода и почему у тебя не получилось? Я здесь сейчас пытаюсь помочь решить имеющиеся проблемы, а не написать весь код за тебя.
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1433 Август » 19.06.2017, 09:34

оффтоп, флейм, оскорбления будут удаляться, даже если в сообщении находится Ваш вопрос. Будьте более аккуратны в общении.
exooman » 19.06.2017, 11:13 Предупреждение на 7 дней
нарушение п.п. 3.4. В случае рецидива, последует бан на неделю.
Август
Сообщения: 104

  • 2

Сообщение #1434 jstas » 19.06.2017, 10:17

Август писал(а):На колу мочало - начинай сначала. На одни и те же грабли наступать? Нет уж, спасибо. Не надо ничего мне помогать не понимая какая мне помощь нужна. Спасибо за уже оказанную помощь. Всего хорошего.
Не буду учиться, и не уговаривайте! :)
Август, на твоем месте, я был бы только рад, что Андрей взялся помогать. Он действительно может помочь. Твоя проблема не в том, что люди не умеют учить, а в том, что ты не умеешь учиться. Ты просишь помощи, но вместо того чтобы выполнять советы, которые тебе дают, почему то споришь да еще и оскорбляешь тех кто пытается тебе помочь. Видите ли они учат тебя не так. Знал я тут одного, тоже советов не слушал и учиться не хотел :-D

Приводи цитату из любого места где ты прочитал про создание модуля. Расскажи своими словами как ты это понял, а дальше я думаю Андрей тебе объяснит если что будет непонятно.
Эх, как бы мне это бы тоже, по обмену премудростями?
jstas M
Аватара
Сообщения: 449


  • 2

Сообщение #1435 exooman » 19.06.2017, 11:25

отвечающих я тоже попрошу не выходить за рамки приличия - за флейм и выражение личных переживаний вынужден буду применять ровно те же санкции. Спасибо за понимание.
exooman M
Аватара
Сообщения: 1304


Сообщение #1436 andreymal » 19.06.2017, 11:34

Я всё ещё готов отвечать на вопросы вида «вот я сделал модуль, но чего-то не получается, чяднт» или «вот эта строчка про модули в учебнике/уроке непонятна, объясните её плз», если что :)
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1437 Август » 19.06.2017, 11:44

jstas писал(а):Август, на твоем месте, я был бы только рад, что Андрей взялся помогать. Он действительно может помочь. Твоя проблема не в том, что люди не умеют учить, а в том, что ты не умеешь учиться. Ты просишь помощи, но вместо того чтобы выполнять советы, которые тебе дают, почему то споришь да еще и оскорбляешь тех кто пытается тебе помочь. Видите ли они учат тебя не так. Знал я тут одного, тоже советов не слушал и учиться не хотел
И, опять разборки ... jstas, ну какие я не выполнял советы, если я в скринах показываю их результаты? Он не может, а реально помогал, а здесь что-то, другое. Толи не может, толи действительно опасается что что-то за меня сделает и это его чрезмерно перенапряжёт. Не знаю и гадать не желаю. Если не может помочь в коде, может в чём другом поможет - меня это не напрягает. Вполне может быть так, что кто-то другой сможет помочь, тот кто знает как или просто понял где я блуждаю.
Ну не попадались мне обучалки как делать модули, да и необходимости не было, и будет ли в них необходимость в дальнейшем вообще для моих целей непонятно.
Изображение
Залез в шаблоны.
Изображение
Получил модуль. Дальше-то что, как его к моему коду прилепить, даже если я найду или уже знаю как его вызвать?
К тому же условие:
if emp['IsCube'] == False: # если в сцене нет ни одного куба
Dict = {} # создать словарь с названием Dict
не должно позволять повторно создавать словарь после создания первого куба, а он или создаётся или обновляется непонятно почему.
Хотел, не хотел учиться... Чего гадать?
Два шага сделал в создании модуля, ну и на сколько растянется наша переписка с помощью такой "помощи"?
Честно говоря что-то от неё стал утомляться.
То, что можно было показать одним ответом растянулось на полмесяца. Эффект сногсшибенный.
Последний раз редактировалось Август 19.06.2017, 11:53, всего редактировалось 1 раз.
Август
Сообщения: 104

Сообщение #1438 andreymal » 19.06.2017, 11:50

Август писал(а):Ну не попадались мне обучалки как делать модули
Не ври, попадались.
https://andreymal.org/20/
Там есть объяснение, как создать модуль, пример простейшего модуля и пример его запуска с демонстрацией его работы.
Если по указанной ссылке какое-то предложение про модули не понятно — цитируй сюда и спрашивай.

Добавлено спустя 51 секунду:
У меня всё сильнее уверенность в том, что по указанной выше ссылке не было прочитано вообще ни буквы. :-/
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 969

Сообщение #1439 Август » 19.06.2017, 12:44

andreymal писал(а):Август писал(а):
Ну не попадались мне обучалки как делать модули
Не ври, попадались.
https://andreymal.org/20/
Там есть объяснение, как создать модуль, пример простейшего модуля и пример его запуска с демонстрацией его работы.
Если по указанной ссылке какое-то предложение про модули не понятно — цитируй сюда и спрашивай.
Это о фрагменте:
import bge

print("Loading globalDict...")
bge.logic.loadGlobalDict()

def load(cont):
if not cont.sensors["Load"].positive:
# выходим, если кнопка не нажата
Return
…………………………..
что ли?
В моём сообщении от 15.06.2017, 21:32 пишу:
«Правильно ли я понял, что ошибка моя в том, что неверно объявлял Словарь, а что его необходимо объявлять как модуль bge, т.е. bge.logic.GlobalDict() и в последствии сохранять в нём требуемые данные и получать их через функции save(ключ, значение) и get(ключ, значение), я, конечно, опробую - как на зло много отвлекающих моментов».
Получаю ответ 15.06.2017, 22:18:
Август писал(а):
его необходимо объявлять как модуль bge
Ответ: Нет, словарь в блендере объявляется как и любой другой словарь в любом другом питоне

Август писал(а):
не подозревая что это и есть Словарь
Ответ: Это и есть словарь, но не тот, который нужен, объекты в нём хранить нельзя

Правда, вполне адекватные, исчерпывающие ответы? Угадайте с трёх раз автора.
Коли моё предположение отвергается по поводу bge.logic.GlobalDict(), то как я должен был среагировать, пытаться всё равно данный код в сообщении приспособить к своему?
Я поверил и стал искать другие варианты которые получал от других участников и пытаясь их изобрести самостоятельно поскольку адекватного ответа поясняющего хоть чего-то не получил.
andreymal, не можете помочь или не хотите, так не лезьте - мне и так модератор баном уже грозит за вашу, так называемую помощь.
Август
Сообщения: 104

  • 1

Сообщение #1440 andreymal » 19.06.2017, 13:02

Август писал(а):Это о фрагменте:
Нет, этот код вообще ни при чём, про модули написано выше. Если ты уж так сильно не хочешь читать всё по той ссылке, открой ту ссылку, нажми Ctrl+F, введи в строку поиска «модуль» — и браузер автоматически тебя перекинет в место, где рассказывается про модули. Смотри первые пять результатов. Если ты и после этого не увидишь пример с модулем, то ты безнадёжен и я буду вынужден свалить, оставив тебя один на один с твоими проблемами.
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
exooman » 19.06.2017, 13:43 Предупреждение на 7 дней
нарушение п.п. 3.4
andreymal M
Аватара
Сообщения: 969

Пред.След.

Вернуться в Игровой движок Blender

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость