Я пытаюсь использовать Shady для представления последовательности кадров изображения.Я управляю потоком с другой машины, поэтому сначала я проинструктирую машину, на которой запущен Shady, представить первый кадр, а затем - запустить остальные кадры.Я создаю экземпляр World и прикрепляю к нему функцию обратного вызова анимации.В рамках этого обратного вызова я слушаю сообщения от другого компьютера (используя UDP).Сначала я получаю команду для загрузки заданной последовательности (сохраняемой в виде массива), и я делаю
def loadSequence(self, fname):
yy = np.load(fname)
pages = []
sz = yy.shape[0]
for j in range(yy.shape[1]/yy.shape[0]):
pages.append(yy[:, j*sz:(j+1)*sz])
deltax, deltay = (self.screen_px[0] - sz) / 2, (self.screen_px[1] - sz) / 2
if (self.sequence is None):
self.sequence = self.wind.Stimulus(pages, 'sequence', multipage=True, anchor=Shady.LOCATION.UPPER_LEFT, position=[deltax, deltay], visible=False)
else:
self.sequence.LoadPages(pages, visible=False)
Когда я получаю команду для показа первого кадра, я делаю:
def showFirstFrame(self, pars):
self.sequence.page = 0 if (pars[0] == 0) else (len(self.sequence.pages) - 1)
self.sequence.visible = True
Но что мне теперь делать, чтобы другие кадры отображались?В примерах, которые я вижу, s.page устанавливается как функция времени, но мне нужно показать все кадры, независимо от времени.Поэтому я думал о том, чтобы сделать что-то вроде этого:
def showOtherFrames(self, pars, ackClient):
direction, ack = pars[0], pars[2]
self.sequence.page = range(1, len(self.sequence.pages)) if (direction == 0) else range(len(self.sequence.pages)-2, -1, -1)
Но это не сработает.В качестве альтернативы я подумал об определении функции, которая принимает t в качестве аргумента, но игнорирует его и использует вместо этого счетчик, хранящийся в глобальной переменной, но я хотел бы понять, как правильно сделать это.