我如何在pygame中请求表面孩子的类型和数量?

时间:2017-05-05 22:34:08

标签: python-3.x pygame children surface

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);
}

这是我用来形象化我的问题的测试代码。我所问的基本上是一种方法,通过它我可以某种方式请求我的表面对象内的子类型和数量。例如,如果我的表面中有一个圆形,一个正方形,一条线或其他类型的对象,我想要一个表面中所有类型的列表,我也想要这个数字。

1 个答案:

答案 0 :(得分:1)

Surfaces仅保存有关它们所包含的像素/颜色的信息,而不是关于它们在其上绘制的形状。如果您想知道有多少个形状,您必须使用列表,pygame.sprite.Group或其他数据结构来存储有关它们的信息。

您的pygame.Rect列表中已有块(blocks s),因此您只需调用len(blocks)即可获得块数。您也可以使用rects将圈子存储在circles列表中。

最终,您可以创建自己的Shape类或使用pygame.sprite.Sprite并将它们的实例放入列表/精灵组中。