[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] Referencing instances by memory address



In my game that I'm working on, Senso (which is my first game in Pygame), there is a main game class, Game, which handles things on the global level. One thing it does is store each instance of game objects in dictionaries, with the dictionary keys being each instance's memory address, grabbed with id(). When an instance needs to be removed, part of the process involves removing the dictionary reference of the instance, by calling "del game.myclassdict[id(self)]" (replacing "myclassdict" with the actual name of the correct dictionary). This seems to cause a problem: sometimes, this action seems to reference a nonexistant key in the respective dictionary. I've only experienced it with bullets. I've checked and double-checked the code, and it doesn't seem that at any point I forget to add an instance to the dictionary.

This problem has been around in my game for quite a while, but only recently I have been able to consistently replicate it, while I was just messing around with my game. Attached is my game as it is now. To see the error, run senso.py and choose game 4 when prompted. It should happen pretty quickly (in less than a second). Sometimes it takes longer.

Does anyone have any idea why this might happen?

(Also, please let me know if I'm doing something stupid! I won't feel bad! :) )

Attachment: Senso-.zip
Description: Zip archive