requestAnimationFrame(mainLoop); // start when code below done.
// set up keyboard IO
const keys = {
KeyP : false,
Enter : false,
listener(e){
if(keys[e.code] !== undefined){
keys[e.code] = e.type === "keydown";
e.preventDefault();
}
}
}
addEventListener("keydown",keys.listener);
addEventListener("keyup",keys.listener);
// the current game state
var currentState = startGame;
function startGame (){
// code to do a single frame of start game
// display press enter to start
if(keys.Enter){
keys.Enter = false;
currentState = game; // start the game
}
}
function pause(){
// code to do a single frame of pause
// display pause
if(keys.KeyP){
keys.KeyP = false; // turn off key
currentState = game; // resume game
}
}
function game(){
// code to do a single frame of game
if(keys.KeyP){
keys.KeyP = false; // turn off key
currentState = pause; // pause game
}
}
function mainLoop(time){
currentState(); // call the current game state
requestAnimationFrame(mainLoop);
}
这是我用来形象化我的问题的测试代码。我所问的基本上是一种方法,通过它我可以某种方式请求我的表面对象内的子类型和数量。例如,如果我的表面中有一个圆形,一个正方形,一条线或其他类型的对象,我想要一个表面中所有类型的列表,我也想要这个数字。
答案 0 :(得分:1)
Surfaces仅保存有关它们所包含的像素/颜色的信息,而不是关于它们在其上绘制的形状。如果您想知道有多少个形状,您必须使用列表,pygame.sprite.Group
或其他数据结构来存储有关它们的信息。
您的pygame.Rect
列表中已有块(blocks
s),因此您只需调用len(blocks)
即可获得块数。您也可以使用rects将圈子存储在circles
列表中。
最终,您可以创建自己的Shape
类或使用pygame.sprite.Sprite
并将它们的实例放入列表/精灵组中。