Я почти заставил формулу выбора изометрической плитки работать, но она, кажется, немного отключена: http://prntscr.com/pn3gbv
Кажется, она работает правильно, когда мышь наводится на первую половину плитки, но она прыгаетк следующей плитке, когда мышь перемещается во вторую половину: http://prntscr.com/pn3hpx
( здесь видео, показывающее проблему) .
Это также нене учитывать камеру, и я не знаю, как это реализовать. Так что некоторая помощь в этом тоже будет признательна.
Ниже приведен соответствующий используемый код, а - это минимальный исполняемый пример , а также используемый ресурс изображения:
![path.png](https://i.imgur.com/P1QVJqd.png)
import pyglet
tile_width_half = 84/2
tile_height_half = 51/2
class Game(pyglet.window.Window):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.island = Island()
self.camera = Camera()
self.selection = pyglet.sprite.Sprite(pyglet.image.load("path.png"))
def on_mouse_motion(self, x, y, dx, dy):
global tile_height_half,tile_width_half
j = int((x / tile_width_half + y / tile_height_half) / 2)
i = int((y / tile_height_half - x / tile_width_half) / 2)
self.selection.x = (j-i)*tile_width_half
self.selection.y = (j+i)*tile_height_half
def on_draw(self):
self.clear()
self.island.draw()
self.selection.draw()
def on_key_press(self, symbol, modifiers):
if symbol == key.A:
self.camera.left = True
if symbol == key.W:
self.camera.up = True
if symbol == key.D:
self.camera.right = True
if symbol == key.S:
self.camera.down = True
if symbol == key.ESCAPE:
pyglet.app.exit()
def on_key_release(self, symbol, modifiers):
if symbol == key.A:
self.camera.left = False
if symbol == key.W:
self.camera.up = False
if symbol == key.D:
self.camera.right = False
if symbol == key.S:
self.camera.down = False
def update(self,dt):
for tile in self.island.all_sprites:
tile.x += self.camera.position[0]
tile.y += self.camera.position[1]
self.camera.move()
if __name__ == '__main__':
game = Game(800,600,"title")
pyglet.clock.schedule_interval(game.update,1/60)
pyglet.app.run()