UniCurses на Python 3 под windows

Темы, связанные с проектированием и программированием roguelike-игр

Модераторы: Sanja, Максим Кич

vapekreng
Сообщения: 63
Зарегистрирован: 22 фев 2016, 22:33

Re: UniCurses на Python 3 под windows

Сообщение vapekreng » 24 сен 2016, 23:59

Пишу в состоянии, отличном от трезвого, прошу извинить. если невнятно выражу мысль, завтра поправлю. Есть ли возможность в очистить очередь ввода в биарлибе? Потестил героя при радиусе видимости 20 - не понравилось...

Аватара пользователя
Jesus05
Сообщения: 1840
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

Re: UniCurses на Python 3 под windows

Сообщение Jesus05 » 03 окт 2016, 08:05

Вообще игнорировать клавиши не очень корректно, и где-то мы тут это обсуждали(кажется в теме терминала). некоторая поочередность нажатых клавиш даже если игра повисла должна отрабатывать ровно как эта поочередность когда игра отвиснет.
Но могу тебе предложить 2 варианта:
1. пропустить все клавиши и считывать всегда только последнюю... реализуется через read и has_input делаем read пока has_input не вернет false тогда ты будешь иметь всегда последнюю нажатую кнопку.
2. пропускать одинаковые клавиши. делаешь 2 переменные в одну пишешь прошлую клавишу в другую текущую если одинаковы игнорируешь пока has_input не вернет false. (т.е. повторяющиеся клавиши обрабатываешь только если они последние)

vapekreng
Сообщения: 63
Зарегистрирован: 22 фев 2016, 22:33

Re: UniCurses на Python 3 под windows

Сообщение vapekreng » 03 окт 2016, 13:03

Первый вариант, кажется, то, что надо, благодарю!

vapekreng
Сообщения: 63
Зарегистрирован: 22 фев 2016, 22:33

Re: UniCurses на Python 3 под windows

Сообщение vapekreng » 06 окт 2016, 19:35

Что скажете насчет такой реализации? Пропали все тормоза даже когда дальность видимости выставил 100:
Скрытый текст: ПОКАЗАТЬ

Код: Выделить всё

    while True:
        key = terminal.read()
        # тут проверяю, что нажата назначенная на что-нибудь кнопка
        while key not in keys:
            key=terminal.read()
        if key == terminal.TK_CLOSE or key == terminal.TK_ESCAPE:
            break
        # А тут чищу очередь ввода
        while terminal.has_input():
            terminal.read()
        TestMap.move_mob(Hero, key)
        aos = AreaOfSight.AoS(Hero.x, Hero.y, Hero.sstats.range_of_visibility, TestMap.transparent_map)
        TestMap.draw(aos.get())
        terminal.printf(0, 0, 'time=' + str(time))
        terminal.refresh()

Аватара пользователя
Jesus05
Сообщения: 1840
Зарегистрирован: 02 дек 2009, 07:50
Откуда: Норильск, сейчас Санкт-петербург.
Контактная информация:

Re: UniCurses на Python 3 под windows

Сообщение Jesus05 » 10 окт 2016, 08:40

vapekreng писал(а):Что скажете насчет такой реализации? Пропали все тормоза даже когда дальность видимости выставил 100:
Скрытый текст: ПОКАЗАТЬ

Код: Выделить всё

    while True:
        key = terminal.read()
        # тут проверяю, что нажата назначенная на что-нибудь кнопка
        while key not in keys:
            key=terminal.read()
        if key == terminal.TK_CLOSE or key == terminal.TK_ESCAPE:
            break
        # А тут чищу очередь ввода
        while terminal.has_input():
            terminal.read()
        TestMap.move_mob(Hero, key)
        aos = AreaOfSight.AoS(Hero.x, Hero.y, Hero.sstats.range_of_visibility, TestMap.transparent_map)
        TestMap.draw(aos.get())
        terminal.printf(0, 0, 'time=' + str(time))
        terminal.refresh()
Учитывая обсужденное ранее я бы начало заменил на:

Код: Выделить всё

while True:
	while True:
		key = terminel.read()
		if (key in keys):
			break
	if key == terminal.TK_CLOSE ......
и наверное разбил это по функциям.

Код: Выделить всё

while True:
	key = GetKey(keys)
	if isExitKey(key):
		break;
	CleanKeyQueue()
	TestMap.move_mob(Hero, key)
	...
а потом бы и CleanKeyQueue перенес бы в GetKey

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 37 гостей