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

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

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

  • 1

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

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


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



Сообщение #1381 Август » 11.06.2017, 15:13

jstas писал(а):Август, выложи файл
Без проблем: http://my-files.ru/9ovhb4, только файл рабочий - на данный момент цель понять как избавиться от двойного добавления объекта. Потому важен только скрипт Coordinaty cursora - остальное, на данный момент, для меня малозначимо (временно).
Август
Сообщения: 104

Сообщение #1382 Bibo » 11.06.2017, 17:11

getButtonStatus это функция, которой нужно передать параметр
getButtonStatus(RIGHTMOUSE)
Не нужно сравнивать саму функцию с единицей.
Bibo
Аватара
Сообщения: 468

Сообщение #1383 Август » 11.06.2017, 18:12

Bibo писал(а):getButtonStatus это функция, которой нужно передать параметр
getButtonStatus(RIGHTMOUSE)
Не нужно сравнивать саму функцию с единицей.
Bibo, от слов к делу. Файл выложен. Предложите то, что считаете правильным, внесите изменения в ошибочный фрагмент, думаю тогда пойму суть своей ошибки и пойду дальше.
Август
Сообщения: 104

Сообщение #1384 Август » 15.06.2017, 06:10

Всем добрый день.
denis8424 писал(а):3) Есть еще один вариант, использовать словарь, наверное он будет ближе всего к тому, что ты хочешь:
КОД: ВЫДЕЛИТЬ ВСЁ
# создаем пустой словарь или достаем его откуда-то.
objDict = {}
# добавляем объект со скрытого слоя
.............
denis8424, но ведь в этом случае при каждом новом обращении к скрипту (создании нового объекта), словарь будет образовываться вновь, а в результате он будет иметь только последнюю запись.
Я попробовал этот вариант и убедился в этом. Распечатка объектов сцены показывает наличие вновь созданных одноимённых объектов, а распечатка словаря показывает наличие только одной, последней записи.
Как создать словарь так, чтобы последующие обращения к скрипту его не обнуляли?
Я попробовал вариант:
objDict = {'nameCube': id('newOb')}
и потом:
Код: Выделить всё
if mouseMove.positive:
    emp.worldPosition = mouseMove.hitPosition
    mouseR.getButtonStatus(RIGHTMOUSE)
    if mouseR.positive:    # если нажата правая клавиша мышки
        print("emp.worldPosition = ", emp.worldPosition)
        newOb = scene.addObject("Cube", emp, 0) # 'Cube' – имя объекта который прибавляется. emp – Центр объекта в который добавляется объект. 0 - время (integer) – Срок жизни добавленного объекта, в кадрах.
        NCube += 1
        nameCube ='Cube' + str(NCube)
        print("nameCube = ", nameCube)
        print("newOb - ", newOb, " id(newOb) - ", id(newOb))                    # смотрим идентификатор свежесозданного объекта
        emp["numCube"] = NCube
        objDict = {nameCube : id(newOb)}
        abc=len(objDict)
        print("abc = ", abc)
        for key, value in objDict.items():
            print("objDict = key = ", key, "value", value)
Строка всё равно вывела только один объект (одну запись, последнюю) из словаря, а не все созданные записи.
И, ещё, в списке объектов появляются одноимённые объекты, т.е. Cube - а переименовать-то их можно для наглядности, именно в списке объектов? (извините если повторяюсь с вопросом, что-то не попался мне такой ответ на глаза).
Последний раз редактировалось Август 15.06.2017, 09:38, всего редактировалось 1 раз.
Август
Сообщения: 104

Сообщение #1385 andreymal » 15.06.2017, 09:05

Поэтому используй не Script, а Module, создавай словарь за пределами вызываемой функции и он будет создан строго один раз
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 1073

Сообщение #1386 Август » 15.06.2017, 09:49

andreymal писал(а):Поэтому используй не Script, а Module, создавай словарь за пределами вызываемой функции и он будет создан строго один раз
Пример, или ссылку на пример можете привести? Что такое Module понятие имею (хоть и поверхностное), но ни разу пользоваться им не приходилось.
В моём последнем ответе denis8424, я дал фрагмент своего кода. Какие его строки должны войти в модуль и в каком месте должно быть создание словаря?
Август
Сообщения: 104

Сообщение #1387 andreymal » 15.06.2017, 11:38

Август писал(а):ссылку на пример можете привести?
https://andreymal.org/20/ ;)
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 1073

Сообщение #1388 Август » 15.06.2017, 20:32

andreymal писал(а):Август писал(а):
ссылку на пример можете привести?
https://andreymal.org/20/
andreymal, я статью по этой ссылке уже видел, однако не понял как избавиться от двойного (нажатие, отпуск) щелчка.
На словарь тогда вообще не обратил внимание, поскольку ответ по двойному щелчку так и не получил. Вообще текст сложен для восприятия, поскольку автор попытался мЕньшими усилиями дать бОльшую информацию при значительной разбросанности по тексту. Однако спасибо ему большое за эту попытку передачи знаний. В конечном итоге понять его можно, хоть и не просто.
Правильно ли я понял, что ошибка моя в том что неверно объявлял Словарь, а что его необходимо объявлять как модуль bge, т.е. bge.logic.GlobalDict() и в последствии сохранять в нём требуемые данные и получать их через функции save(ключ, значение) и get(ключ, значение), я, конечно, опробую - как на зло много отвлекающих моментов.
Меня сбила с толку статья https://www.ibm.com/developerworks/ru/library/l-python_part_4/index.html#ibm-pcon по которой я и пытался действовать (по крайней мере, как я её понял).
bge.logic.saveGlobalDict()(loadGlobalDict()) я использовал ранее как хранилище значений глобальных переменных не подозревая что это и есть Словарь.

from bge import logic
............................
logic.globalDict['HAZBAHIE'] = 'bla bla bla' # Записываем название данных
logic.globalDict['patrony'] = 120 # Записываем значение переменной 'patrony'
Так мне его однажды показали.
Вопрос: ввод второго значения вводится через двоеточие? нужны фигурные скобки или квадратных достаточно? Как ввести два значения, как в ссылке сбившей меня с толку?
Думается что 5 или сколько там потребовалось бы строк кода для меня были бы понятнее чем эта гонка по ссылкам. И, главное, потребовало бы меньшие потери времени и сил как у вас, так и у меня.
Извините, конечно, но это по моей логике.
Август
Сообщения: 104

Сообщение #1389 andreymal » 15.06.2017, 21:18

Август писал(а):не понял как избавиться от двойного (нажатие, отпуск) щелчка
Там есть не только объяснение причины происходящего, но и способ решения сразу с примером, которые ты так любишь, читай внимательнее

Август писал(а):его необходимо объявлять как модуль bge
Нет, словарь в блендере объявляется как и любой другой словарь в любом другом питоне

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

Август писал(а):Вопрос: ввод второго значения вводится через двоеточие? нужны фигурные скобки или квадратных достаточно? Как ввести два значения, как в ссылке сбившей меня с толку?
Про это всё рассказано в разделе про словари в абсолютно любом учебнике по питону (в том числе в викиучебнике и даже с примерами)

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

  • -2

Сообщение #1390 Август » 16.06.2017, 06:22

andreymal писал(а):Август писал(а):
не понял как избавиться от двойного (нажатие, отпуск) щелчка
Там есть не только объяснение причины происходящего, но и способ решения сразу с примером, которые ты так любишь, читай внимательнее

Август писал(а):
его необходимо объявлять как модуль bge
Нет, словарь в блендере объявляется как и любой другой словарь в любом другом питоне

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

Август писал(а):
Вопрос: ввод второго значения вводится через двоеточие? нужны фигурные скобки или квадратных достаточно? Как ввести два значения, как в ссылке сбившей меня с толку?
Про это всё рассказано в разделе про словари в абсолютно любом учебнике по питону (в том числе в викиучебнике и даже с примерами)

Август писал(а):
потребовало бы меньшие потери времени и сил
Меньше времени и сил потребует изучение основ питона по любому учебнику Как я уже говорил ранее, любой хороший учебник содержит любимые тобой примеры, гугл в помощь.
Большое спасибо за помощь и разъяснения, которые не оказали ни помощи, ни разъяснения, а обеспечили потерю надежды на вас и времени.
Август
Сообщения: 104

Сообщение #1391 Диман » 16.06.2017, 09:37

Народ, а из вас ктонить делал вещи для мастерской стим?
Диман
Аватара
Сообщения: 136

Сообщение #1392 Август » 16.06.2017, 10:19

denis8424, в вашем примере "Сохранение и загрузка" в строке saveFile = open("Game1.sav", "w") в первых кавычках имя открываемого файла? А, во вторых?
В строке saveFile.write(str(cubePosi[x]) + "\n") - строковое значение позиции куба, а в кавычках что? Конец строки?
Буду благодарен, если найдёте возможность ответить.
Август
Сообщения: 104

Сообщение #1393 andreymal » 16.06.2017, 10:27

Август писал(а):Большое спасибо за помощь и разъяснения, которые не оказали ни помощи, ни разъяснения, а обеспечили потерю надежды на вас и времени.
Уж простите, мне очень трудно отвечать на вопросы, ответы на которые есть в абсолютно любом учебнике по питону ¯\_(ツ)_/¯

Август писал(а):в строке saveFile = open("Game1.sav", "w") в первых кавычках имя открываемого файла?
Ответ на этот вопрос тоже есть в абсолютно любом учебнике по питону.

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

  • 0

Сообщение #1394 Август » 16.06.2017, 11:37

andreymal писал(а):Если учебники настолько непонятны, что проще спрашивать каждую мелочь у других, то лучше будет взять и разобрать какой-нибудь учебник по строчкам в каком-нибудь отдельном чятике, не касаясь при этом BGE
Идёт здоровяк по лестнице и видит бабка ковыляет по ней. "Помогу бабке" думает здоровяк, взял её под руку и потащил её перешагивая через ступень, а то и через две. Не задалась его помощь. Тогда он стал ей советовать ознакомиться со способами захвата поручней и технологией переноса веса для ходьбы через ступень, а то и через две ...
Я бы просто снизил свою скорость, взял бабку под руку и принял часть её веса на себя ...
Но, это моя логика - помогая, необходимо оказывать помощь в том, в чём нуждается человек сейчас, в чём он просит её, а не в том что ему когда-то вдруг потребуется по мнению собирающегося помогать сейчас.
Конечно, спасибо большое за информацию, что в учебниках всё есть.
Август
Сообщения: 104

  • 5

Сообщение #1395 andreymal » 16.06.2017, 11:46

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

Сообщение #1396 Август » 16.06.2017, 12:37

andreymal писал(а):Сейчас человек нуждается в изучении основ, чтобы не задавать вопросы «что такое поручень», «как делать захват», «как нужно передвигать ноги чтобы ходить», «я попытался поднять обе ноги и почему-то упал, что я делаю не так». Сперва изучают всё это и только потом ковыляют по лестницам
А, как понять, нужно ли вообще подыматься именно по этой лестнице, ведь может выгоднее подняться по другой? В Python много есть возможностей, а вот в какой мере они будут мне необходимы в освоении Blender'а? Нужно сначала "пошшупать", понять свою выгоду, а необходимость в углублении знаний в этом направлении или другом скажется сама собой.
Август
Сообщения: 104

  • 3

Сообщение #1397 andreymal » 16.06.2017, 12:49

Углубление знаний, может, действительно не нужно, но проблема в том, что в твоём случае углублять нечего, у тебя знаний нет вообще никаких. Переменные, объекты, числа, строки, списки, словари, условия, циклы, функции, пространства имён, модули - это необходимый минимум знаний не только для работы с BGE, но и с любым другим питоном. Причём я в этот список даже не включаю классы, методы, кортежи, множества, исключения, декораторы, лямбды, сопрограммы, генераторные выражения и методы и модули стандартной библиотеки, хотя это тоже из основ — но в BGE можно обойтись без этого.
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 1073

Сообщение #1398 Август » 16.06.2017, 16:22

andreymal писал(а):Углубление знаний, может, действительно не нужно, но проблема в том, что в твоём случае углублять нечего, у тебя знаний нет вообще никаких. Переменные, объекты, числа, строки, списки, словари, условия, циклы, функции, пространства имён, модули - это необходимый минимум знаний не только для работы с BGE, но и с любым другим питоном. Причём я в этот список даже не включаю классы, методы, кортежи, множества, исключения, декораторы, лямбды, сопрограммы, генераторные выражения и методы и модули стандартной библиотеки, хотя это тоже из основ — но в BGE можно обойтись без этого.
Ну, и какие знания у меня появились от общения с вами, что знания можно получить от кого-то другого (например из учебников), но не от вас? Вы полагаете, что я не знаю что их можно получить из справочников, каких полно в интернете? Учебников практически нет - учебник и справочник, это не одно и то же, и я об этом уже писал. В справочнике ведь надо знать где искать. А мне, порой, даже непонятно что искать. У меня действительно в результате этого общения появилось знание что от вас знания нереально получить, толи из-за их отсутствия (ведь я с не меньшим успехом могу так же "отмазываться"), толи из-за вашего нежелания делиться ими (в таком случае зачем вы вообще ответили мне?).
Я обращаюсь к тем, кто желает поделиться своим опытом, кто хочет попробовать предложить своё вИдение решения проблемы, кто хочет в прямом общении показать в каких трёх соснах я блуждаю из-за желания мне помочь. Благодаря таким ребятам я и смог разобраться в очень многих ситуациях в Blender'е, в том числе и в этой серии консультаций на данном форуме.
Я не понимаю и не пойму вас в том случае, если желания помогать нет, а вы для чего-то вообще ответили изначально? Для чего? От скуки? От желания покрасоваться самому перед собой? Мне такие мотивы непонятны поскольку они в мою логику не вписываются.
В мою логику с лёгкостью вписывается желание помочь так как эту помощь просят. Вписывается в мою логику если помощь требует очень больших временнЫх затрат, которыми желающий помочь просто не располагает и по этой причине уходит от оказания её в этом виде. Вписывается отсутствие желания помогать, и, соответственно пропуск просьбы с безразличием, без привлечения к себе не нужного внимания.
Вот такая у меня логика, вполне возможно что она хромая, но пока она меня устраивает.
Август
Сообщения: 104

Сообщение #1399 dron » 16.06.2017, 16:35

вот справка по блендеру (а точнее по тому что относится к bge) https://docs.blender.org/manual/en/dev/game_engine/logic/index.html
хочешь понять что ты делаешь не так изучи основы python https://stepik.org/catalog?language=ru&q=python бесплатные курсы
а вот справочник по апи блендера https://blender.org/api/blender_python_api_current/

это исчерпывающий список для того, что бы начать работать с блендером и python!
этих 3 ссылок будет достаточно для большинства задач.

зы: на это нужно будет 3-4 недели и если вы Август вдруг появитесь раньше значит вы не удосужились ознакомится с информацией и все ваши вопросы из разряда "сделайте за меня".
Данный контент распространяется под лицензией "Creative Commons BY-SA" если не указанно иного.
http://creativecommons.org/licenses/?lang=ru
dron M
Аватара
Сообщения: 109

  • 1

Сообщение #1400 andreymal » 16.06.2017, 16:41

Август писал(а):Учебников практически нет
Викиучебника должно быть достаточно. Примеры там есть. Искать там ничего не надо, просто читать по порядку. И выполнять примеры, разумеется.

Август писал(а):в каких трёх соснах я блуждаю
Эти три сосны — основы питона, ну :)

Август писал(а):вы для чего-то вообще ответили изначально?
Для попыток замотивировать прочитать-таки какой-нибудь учебник. Не справочник, а учебник.

Изучить самые-самые основы, которые я перечислил выше, займёт день-другой (хотя, конечно, намного лучше потратить вышеупомянутые 3-4 недели), зато за счёт отсутствия откровенно новичковых вопросов в будущем освободится месяц-другой как твоего, так и нашего времени :-D

Вот на вопросы, что где как непонятно по учебнику, я буду готов конструктивно отвечать :)
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 1073

Пред.След.

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

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

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