while trying to make my game, I noticed that you can't change the anchor point of Sprites in pyglet.
I use some convoluted way(see bottom of the post) to draw my minimap(WIP) so that the rooms are centered and lined-up correctly, however, I thought of the following occurence.
I'll be using the mouse-pointer to direct a 2D person from the top. However, if the anchor point of a sprite is the bottom-left corner of the orginal image, how can you make it feel as though the anchor point is in the middle of the sprite.
This may not be so important for the Player, but it would be hell to algorithmically controll the NPC's that fight.
Any help and input appreciated.
Code:
pic_img = image.load(imgPath)
picX, picY = window.width/2,window.height/2
pic = pyglet.sprite.Sprite(pic_img, x=picX, y=picY)
pic.rotation = roomType.ImageRotation
if pic.rotation == 0:
picX = picX - pic.width / 2
picY = picY - pic.height / 2
elif pic.rotation == 90:
picX = picX - pic.width / 2
picY = picY + pic.height / 2
elif pic.rotation == 180:
picX = picX + pic.width / 2
picY = picY + pic.height / 2
elif pic.rotation == 270 or pic.rotation == -90:
picX = picX + pic.width / 2
picY = picY - pic.height / 2
pic.x,pic.y = picX, picY
Answer
Literally a few seconds after posting this I found the solution(Thought of it while typing actually)
after the loading of the image, but before assigning to the sprite, you change the anchor point for the image, which fixes the issue(if the width of your image is even, it works perfectly)
updated code:
pic_img = image.load(imgPath)
pic_img.anchor_x = pic_img.width // 2 ##this line is new
pic_img.anchor_y = pic_img.height // 2 ## and this line also
picX, picY = window.width/2,window.height/2
pic = pyglet.sprite.Sprite(pic_img, x=picX, y=picY)
pic.rotation = roomType.ImageRotation
No comments:
Post a Comment