Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » скролл curses.newpad, ограничения? (скролл работает) [RSS Feed]

#1 Дек. 15, 2013 18:20:14

antib
От:
Зарегистрирован: 2010-02-23
Сообщения: 37
Репутация: +  0  -
Профиль   Отправить e-mail  

скролл curses.newpad, ограничения? (скролл работает)

Наблюдаю явление, которому не могу найти объяснение.
Пишу в своё удовольствие рогалик, сейчас работаю над генерацией уровня. Просмотр сгенерёного уровня делаю с помошью curses.newpad, скролл которого делаю следующим образом:

        while True:
            c=stdscr.getch()
            if c == ord ('q'):
                break
            if c == ord ('w'):
                cl.scroll (0, -1)
            if c == ord ('a'):
                cl.scroll (-1, 0)
            if c == ord ('s'):
                cl.scroll (0, 1)
            if c == ord ('d'):
                cl.scroll (+1, 0)
            cl.refresh ()

где cl.scroll это

    def scroll (self, __x, __y):
        """Change _x, _y according to arguments. Does not refresh,\
        but sets variables for refresh() to run. """
        assert isinstance (__x, int)
        assert isinstance (__y, int)        
        if self._x == self.lvl.min_x - 2*self.draw_length and __x < 0:
            __x = 0
        elif self._x == self.lvl.max_x + 2*self.draw_length+15 and __x > 0:
            __x = 0
        self._x +=__x
        if self._y == self.lvl.min_y - 2*self.draw_length and __y < 0:
            __y = 0
        elif self._y == self.lvl.max_y + 2*self.draw_length+15 and __y > 0:
            __y = 0
        self._y +=__y

потом делаю pad.refresh ()

Скролл работает, однако в некоторых случаях (когда уровень получается сильно разлапистым) получается, что вниз и вправо скролл не захватывает весь уровень. При этом размеры pad и уровня вполне правильны:
“l” это уровень, “cl” это curses.newpad
In [5]: l
Out[5]: Level (room_size_min = 5, room_size_max = 7,        room_type = "random", digger_where_to = (2, 4, 6, 8),         digger_stamina = 6, doors_are_useful = True,         min_rooms = 5, max_rooms = 10, room_times = 1)
In [6]: l.size_y, l.size_x
Out[6]: (121, 101)
In [7]: cl.pad.getmaxyx()
Out[7]: (123, 103)
Вопрос: может в curses есть какой-то максимальный размер объекта или что? По докам про curses не припоминаю такого. По переменным я понять в чём дело не могу.



ОС - linux mint, Python ver 3.3

Отредактировано antib (Дек. 15, 2013 18:27:06)

Офлайн

  • Начало
  • » GUI
  • » скролл curses.newpad, ограничения? (скролл работает)[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version