阵列支持的网格#

如果您经常使用网格,您会发现这会很慢。您可能需要查看以下内容:
阵列支持的网格已缓冲 -速度更快,并使用缓冲形状
使用精灵v1的栅格 -超快,并使用精灵。在一次函数调用中重新同步到编号网格
使用精灵v2的栅格 速度超快,使用精灵。保留第二个精灵2D网格以匹配2D数字网格
array_backed_grid.py#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | """ Array Backed Grid Show how to use a two-dimensional list/array to back the display of a grid on-screen. Note: Regular drawing commands are slow. Particularly when drawing a lot of items, like the rectangles in this example. For faster drawing, create the shapes and then draw them as a batch. See array_backed_grid_buffered.py If Python and Arcade are installed, this example can be run from the command line with: python -m arcade.examples.array_backed_grid """ import arcade # Set how many rows and columns we will have ROW_COUNT = 15 COLUMN_COUNT = 15 # This sets the WIDTH and HEIGHT of each grid location WIDTH = 30 HEIGHT = 30 # This sets the margin between each cell # and on the edges of the screen. MARGIN = 5 # Do the math to figure out our screen dimensions SCREEN_WIDTH = (WIDTH + MARGIN) * COLUMN_COUNT + MARGIN SCREEN_HEIGHT = (HEIGHT + MARGIN) * ROW_COUNT + MARGIN SCREEN_TITLE = "Array Backed Grid Example" class MyGame(arcade.Window): """ Main application class. """ def __init__(self, width, height, title): """ Set up the application. """ super().__init__(width, height, title) # Create a 2 dimensional array. A two-dimensional # array is simply a list of lists. self.grid = [] for row in range(ROW_COUNT): # Add an empty array that will hold each cell # in this row self.grid.append([]) for column in range(COLUMN_COUNT): self.grid[row].append(0) # Append a cell arcade.set_background_color(arcade.color.BLACK) def on_draw(self): """ Render the screen. """ # This command has to happen before we start drawing self.clear() # Draw the grid for row in range(ROW_COUNT): for column in range(COLUMN_COUNT): # Figure out what color to draw the box if self.grid[row][column] == 1: color = arcade.color.GREEN else: color = arcade.color.WHITE # Do the math to figure out where the box is x = (MARGIN + WIDTH) * column + MARGIN + WIDTH // 2 y = (MARGIN + HEIGHT) * row + MARGIN + HEIGHT // 2 # Draw the box arcade.draw_rectangle_filled(x, y, WIDTH, HEIGHT, color) def on_mouse_press(self, x, y, button, modifiers): """ Called when the user presses a mouse button. """ # Change the x/y screen coordinates to grid coordinates column = int(x // (WIDTH + MARGIN)) row = int(y // (HEIGHT + MARGIN)) print(f"Click coordinates: ({x}, {y}). Grid coordinates: ({row}, {column})") # Make sure we are on-grid. It is possible to click in the upper right # corner in the margin and go to a grid location that doesn't exist if row < ROW_COUNT and column < COLUMN_COUNT: # Flip the location between 1 and 0. if self.grid[row][column] == 0: self.grid[row][column] = 1 else: self.grid[row][column] = 0 def main(): MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE) arcade.run() if __name__ == "__main__": main() |