前提・実現したいこと
pyxelのファイルを実行すると下のようなエラーメッセージが出ます。
発生している問題・エラーメッセージ
pyxel error: unsupported resource file version '1.4.3' in 'LoadAsset'
該当のソースコード
Python
1import pyxel 2import random 3from math import sqrt 4 5WIDTH = 128 6HEIGHT = 128 7 8SCENE_PLAY = 0 9SCENE_GAMEOVER = 1 10 11PLAYER_WIDTH = 8 12PLAYER_HEIGHT = 8 13PLAYER_SPEED = 2 14 15ENEMY_WIDTH = 8 16ENEMY_HEIGHT = 8 17ENEMY_SPEED = 2 18 19BULLET_WIDTH = 2 20BULLET_HEIGHT = 6 21BULLET_SPEED = 2 22 23enemy_list = [] 24bullet_list = [] 25 26def update_list(list): 27 for elem in list: 28 elem.update() 29 30def draw_list(list): 31 for elem in list: 32 elem.draw() 33 34def is_collision(obj_a, obj_b): 35 return obj_a.x + obj_a.w > obj_b.x and obj_a.x < obj_b.x + obj_b.w and obj_a.y + obj_a.h > obj_b.y and obj_a.y < obj_b.y + obj_b.h 36 37class Player(): 38 def __init__(self): 39 self.x = (WIDTH - PLAYER_WIDTH) / 2 40 self.y = HEIGHT - 15 41 self.w = PLAYER_WIDTH 42 self.h = PLAYER_HEIGHT 43 44 def update(self): 45 if pyxel.btn(pyxel.KEY_LEFT): 46 self.x -= PLAYER_SPEED 47 48 if pyxel.btn(pyxel.KEY_RIGHT): 49 self.x += PLAYER_SPEED 50 51 if pyxel.btnp(pyxel.KEY_SPACE): 52 if Bullet.bullet_state: 53 Bullet(self.x + (PLAYER_WIDTH - BULLET_WIDTH) / 2, self.y, 1) 54 Bullet.bullet_state = False 55 56 if self.x < 0: 57 self.x = 0 58 if self.x > WIDTH - PLAYER_WIDTH: 59 self.x = WIDTH - PLAYER_WIDTH 60 61 def draw(self): 62 pyxel.blt(self.x, self.y, 0, 0, 0, PLAYER_WIDTH, PLAYER_HEIGHT, 15) 63 64class Enemy(): 65 def __init__(self): 66 self.x = 0 67 self.y = 10 68 self.w = ENEMY_WIDTH 69 self.h = ENEMY_HEIGHT 70 self.v = ENEMY_SPEED 71 72 enemy_list.append(self) 73 74 def update(self): 75 if self.x + self.v < 0 or self.x + self.v > WIDTH - ENEMY_WIDTH: 76 self.v *= -1 77 self.y += ENEMY_HEIGHT 78 self.x += self.v 79 80 if pyxel.frame_count % (15 * random.randint(3, 5)) == 0: 81 Bullet(self.x + (ENEMY_WIDTH - BULLET_WIDTH) / 2, self.y, -1) 82 83 def draw(self): 84 pyxel.blt(self.x, self.y, 0, 0, 8, ENEMY_WIDTH, ENEMY_HEIGHT, 15) 85 86class Report(Enemy): 87 def __init__(self): 88 super().__init__() 89 self.life = 1 90 91class Test(Enemy): 92 def __init__(self): 93 super().__init__() 94 self.life = 3 95 96 def draw(self): 97 pyxel.blt(self.x, self.y, 0, 0, 8 * self.life, ENEMY_WIDTH, ENEMY_HEIGHT, 15) 98 99class Bullet(): 100 bullet_state = True 101 n = 3 102 def __init__(self, x, y, way): 103 self.x = x 104 self.y = y 105 self.w = BULLET_WIDTH 106 self.h = BULLET_HEIGHT 107 self.v = BULLET_SPEED * way 108 109 bullet_list.append(self) 110 111 def update(self): 112 self.y -= self.v 113 114 def draw(self): 115 if self.v > 0: 116 pyxel.blt(self.x, self.y, 0, 8, 0, BULLET_WIDTH, BULLET_HEIGHT, 15) 117 else: 118 pyxel.blt(self.x, self.y, 0, 10, 0, BULLET_WIDTH, BULLET_HEIGHT, 15) 119 120class App(): 121 def __init__(self): 122 pyxel.init(WIDTH, HEIGHT, caption='INVADER') 123 pyxel.load('game.pyxres') 124 125 self.scene = SCENE_PLAY 126 self.player = Player() 127 self.score = 0 128 129 pyxel.run(self.update, self.draw) 130 131 132 def update(self): 133 if pyxel.btnp(pyxel.KEY_Q): 134 pyxel.quit() 135 136 if self.scene == SCENE_PLAY: 137 self.update_play() 138 elif self.scene == SCENE_GAMEOVER: 139 self.update_gameover() 140 141 def update_play(self): 142 if pyxel.frame_count % 200 == 0: 143 Test() 144 elif pyxel.frame_count % 50 == 0: 145 Report() 146 147 self.player.update() 148 update_list(enemy_list) 149 update_list(bullet_list) 150 151 Bullet.bullet_state = all([bullet.y <= self.player.y - self.player.y / Bullet.n for bullet in bullet_list if bullet.v > 0]) 152 153 for enemy in enemy_list: 154 for bullet in bullet_list: 155 if bullet.v > 0 and is_collision(enemy, bullet): 156 enemy.life -= 1 157 if enemy.life == 0: 158 enemy_list.remove(enemy) 159 self.score += 1 160 bullet_list.remove(bullet) 161 Bullet.bullet_state = True 162 163 if bullet.v < 0 and is_collision(self.player, bullet): 164 self.scene = SCENE_GAMEOVER 165 if is_collision(self.player, enemy): 166 self.scene = SCENE_GAMEOVER 167 168 def update_gameover(self): 169 enemy_list.clear() 170 bullet_list.clear() 171 if pyxel.btnp(pyxel.KEY_ENTER): 172 self.scene = SCENE_PLAY 173 self.score = 0 174 Bullet.n = 3 175 Bullet.bullet_state = True 176 177 178 def draw(self): 179 pyxel.cls(0) 180 181 if self.scene == SCENE_PLAY: 182 self.draw_play() 183 elif self.scene == SCENE_GAMEOVER: 184 self.draw_gameover() 185 186 def draw_play(self): 187 draw_list(enemy_list) 188 draw_list(bullet_list) 189 self.player.draw() 190 pyxel.text(2, 2, "SCORE: " + str(self.score), pyxel.COLOR_WHITE) 191 192 def draw_gameover(self): 193 pyxel.text(48, 40, "GAMEOVER", pyxel.COLOR_WHITE) 194 pyxel.text(42, 55, "RESULT: {}pt".format(self.score), pyxel.COLOR_WHITE) 195 pyxel.text(34, 80, "- PRESS ENTER -", pyxel.COLOR_GRAY) 196 197App()
試したこと
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
> dlopen(/usr/local/lib/python3.9/site-packages/pyxel/core/bin/macos/libpyxelcore.dylib, 6): Symbol not found: __ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16find_last_not_ofEPKcmm
は
https://teratail.com/questions/341644
と同じですけど、直ったのではないのですか?
当時は直って昨日まで普通に使えてたのですが、今朝起きたら使えなくなっちゃいました、。先日頂いたpipのコマンドを使ってみましたが、やっぱり動かないですね。エラーのメッセージが変わって、
pyxel error: unsupported resource file version '1.4.3' in 'LoadAsset'
と出ます。
> エラーのメッセージが変わって
それなら、
import pyxel
のエラーは、やはりpipのやり直しで直るのではないですか?
import pyxel
だけ実行してもエラー出ますか?
今朝、他人が作ったファイルを実行した時にエラー(pyxel error: unsupported resource file version '1.4.3' in 'LoadAsset')が出ました。
そのあと、pip install pyxelを実行してしまいました。そのあと、jbpb0様に先日頂いたコメントを読んで、
pip uninstall pyxel
pip install --no-binary :all: pyxel
を実行しました。
複雑で申し訳ないです。
> pip uninstall pyxel
pip install --no-binary :all: pyxel
を実行しました。
の状態で
import pyxel
だけ実行しても
> unsupported resource file version '1.4.3' in 'LoadAsset'
のエラー出ますか?
pyxelの公式サンプルや、自分が今まで作ったファイルは正常に動きました!
ですが、他人が作ったファイルを開こうとすると、
pyxel error: unsupported resource file version '1.4.3' in 'LoadAsset'
のエラーが出ます。もしかして、開こうとしているファイルの方に問題があるのでしょうか。ちなみに開かないファイルのコードは、質問の「該当のソースコード」の欄に記載しています。
それでしたら、現状質問に書いてるエラーは今解決したいエラーではないので、質問のエラーを解決したいエラー
> unsupported resource file...
に変えてください
Traceback... のところから全部書いてください
> unsupported resource file version '1.4.3'
から類推すると、pyxelのバージョン間で、ファイルの互換性が無い組み合わせがあるのかも
> 他人が作ったファイルを実行した時にエラー
その他人が、同じコードでエラー出ずに実行できるのなら、その他人とpyxelのバージョンを合わせたら、エラー出ないかも
なるほど、ではその方針でpyxelのバージョンを合わせるように動いてみます。ありがとうございました。
あなたの回答
tips
プレビュー