Обновление картинки
|
|
liquide | Дата: Вторник, 12.11.2019, 12:30 | Сообщение # 1 |
Сержант
Группа: Пользователи
Сообщений: 35
Награды: 0
Репутация: 0
Статус: Offline
| В общем такая ситуация. Грубо говоря сделал редактор юнита, можно выбрать в кольчуге или латах будет, оружие какое будет носить. Когда это все выбрал, то программа берет заранее нарисованные картинки и склеивает их. Склеиваю с помощью PIL. И все работает вплоть до момента когда эту картинку надо обновить в Directlabel. А он ее меняет только в первый раз, во все остальные разы он ничего не делает. Причем я пробовал все, я удалял полностью переменную создавал новую, разными способами указывал и .setImage, и label['image'], и напрямую setImage(self.pictureName), и через load.texture, с OnsreenImage та же фигня. Причем склейка точно работает правильно, потому что картинка итоговая сохраняется в корень и там все правильно. Но эта картинка не обновляется в Directlabel.
Вот объявляю DirectLabel в функции когда создается юнит
Код self.pictureName = str(name) + '.png' self.pictureSoldier = DirectLabel(image='Peasant.png', pos=(-1, 0, 0.4), scale=0.5, relief=None, parent=self.mainFrame) self.pictureSoldier.setTransparency(True)
И вот часть кода которая почему то не работает. Код def newPicture(self): if len(self.soldier.clothedAmmu) != 0: self.img1 = Image.open(self.soldier.ammunition[self.soldier.dictAmm[self.soldier.clothedAmmu[0]]][7]) if len(self.soldier.clothedWeapon) != 0 and self.soldier.clothedWeapon[0] != '': self.img2 = Image.open(self.soldier.ammunition[self.soldier.dictAmm[self.soldier.clothedWeapon[0]]][7]) self.img1.paste(self.img2, (0, 0), self.img2) if len(self.soldier.clothedWeapon) > 1 and self.soldier.clothedWeapon[1] != '': self.img2 = Image.open(self.soldier.ammunition[self.soldier.dictAmm[self.soldier.clothedWeapon[1]]][7]) self.img1.paste(self.img2, (0, 0), self.img2) self.img1.save(self.pictureName)
self.pictureSoldier.setImage(self.pictureName)
self.switchBetweenFrame()
Вот так выглядит сначала. Выбираем амуницию и выберем кольчугу.
Картинка поменялась, параметры все тоже поменялись. А теперь дадим ему меч и щит иии характеристики поменялись, картинка нет.
Но в корне картинка правильно построенная, со щитом и мечом. В чем может быть дело? Он переменную эту резервирует где то в кэше и ее только использует?
|
|
| |
liquide | Дата: Вторник, 12.11.2019, 12:31 | Сообщение # 2 |
Сержант
Группа: Пользователи
Сообщений: 35
Награды: 0
Репутация: 0
Статус: Offline
| Вот итоговая картинка которая в корне
|
|
| |
ninth | Дата: Среда, 13.11.2019, 10:55 | Сообщение # 3 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| попробуй перед повторной загрузкой сделать unloadTexture()
|
|
| |
liquide | Дата: Среда, 13.11.2019, 17:28 | Сообщение # 4 |
Сержант
Группа: Пользователи
Сообщений: 35
Награды: 0
Репутация: 0
Статус: Offline
| Вы мой спаситель) Я так и думал, что проблема где то там, но не знал, что есть возможность выгружать текстуры. Самое интересное, что программа работала, когда все команды были грубо говоря в теле основной функции, но потом я решил, что раз столько повторяется одно и тоже, почему бы не улучшить код и не сделать еще одну функцию и после этого уже все сломалось)
|
|
| |
ninth | Дата: Четверг, 14.11.2019, 08:08 | Сообщение # 5 |
Admin
Группа: Администраторы
Сообщений: 1582
Награды: 5
Репутация: 46
Статус: Offline
| Странно на самом деле. Должно было одинаково работать. Панда действительно кеширует в памяти загруженные текстуры, поэтому когда повторно пытаешься загрузить текстурку по тому же пути она просто дёргает то что уже висит в памяти. Сделано для ускорения потому что разные модели зачастую используют одну и туже текстуру по несколько раз.
|
|
| |
serg-kkz | Дата: Четверг, 14.11.2019, 18:44 | Сообщение # 6 |
Генерал-полковник
Группа: Модераторы
Сообщений: 803
Награды: 3
Репутация: 18
Статус: Offline
| Может имеет смысл использовать новоиспеченную функцию по замене текстуры:
Код model.replaceTexture(oldTexture, newTexture)
Вот только сомневаюсь что с GUI это работать будет. В любом случае меш лучше будет.
ООП -
Сообщение отредактировал serg-kkz - Четверг, 14.11.2019, 18:47 |
|
| |