• Advertisement
Sign in to follow this  

Pyglet not drawing a batch to the window

This topic is 1290 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm trying to randomly create and draw a world to a window in pyglet, but when I try to draw a batch (according to www.pyglet.org/doc/programming_guide/displaying_images.html), I don't see anything. This is only a problem with sprites, as I can draw an image perfectly fine.

 

Code for creating the world + the function that will draw the world (along with the functions that will create & update the world.

#imports and sets up all the file dependancies
import pyglet
from random import *
from game import resources
pictures = resources.Pictures()


class World:
	def __init__(self):
		#prepares the world for being drawn
		self.drawn_world = pyglet.graphics.Batch()
		self.world = []
		self.world_length = 40
		
		#sets up the world
		self.top = [] #heaven
		self.common = [] # earth
		self.cave = [] #caves
		self.bottom = [] #underworld
		
		#creates the world
		self.top, self.bottom = self.make_rows(0, 0, 15), self.make_rows(0, 0, 25)
		self.common = self.make_rows(0, 0, 4) + self.make_rows(0, 1, 6)
		self.cave = self.make_rows(0, 4, 20)
		
		#creates grass
		self.create_grass(self.common)
		self.create_grass(self.cave, 20)
		self.load_world(0, 0)
		
	def make_rows(self, bottom_number = 0, top_number=2, depth=10):
		return [[randint(bottom_number ,top_number) for x in range(self.world_length)] for y in range(depth)]

	def create_grass(self, array_name, depth=10):
	
		for y in range(depth):
			for x in range(self.world_length):
				if x < 1:
					continue
				elif array_name[y][x-1] == 0 and array_name[y][x] == 1:
					array_name[y][x] = 2
				elif (not array_name[y][x-1] == 0) and array_name[y][x] == 2:
					array_name[y][x] = 1

				
	def write_out_world(self):
		for x in self.top:
			for y in x:
				print(y, sep='', end = ' ')
			print()
		print("---------------------------------------------------------------------------\n")
		for x in self.common:
			for y in x:
				print(y, sep='', end = ' ')
			print()
		print("---------------------------------------------------------------------------\n")
		for x in self.cave:
			for y in x:
				print(y, sep='', end = ' ')
			print()
		print("---------------------------------------------------------------------------\n")
		for x in self.bottom:
			for y in x:
				print(y, sep='', end = ' ')
			print()
		print("---------------------------------------------------------------------------\n")	
	def load_world(self, player_x, player_y):
		x_count = -1
		for x in self.top, self.common, self.cave, self.bottom:
			x_count += 1
			y_count = -1
			for y in x:
				y_count += 1
				if y == 0:
					continue
				elif y == 1:
					world.append(pyglet.sprite.Sprite(pictures.dirt, player_x + x_count * 10, player_y + y_count * 10, batch = self.drawn_world))
				elif y == 2:
					world.append(pyglet.sprite.Sprite(pictures.grass, player_x + x_count * 10, player_y + y_count * 10, batch = self.drawn_world))
				elif y == 3:
					world.append(pyglet.sprite.Sprite(pictures.stone, player_x + x_count * 10, player_y + y_count * 10, batch = self.drawn_world))
				elif y == 4:
					world.append(pyglet.sprite.Sprite(pictures.sand, player_x + x_count * 10, player_y + y_count * 10, batch = self.drawn_world))
	
	def draw_world(self):
		self.drawn_world.draw()

and then the implementation of the functions,

import pyglet
from game import world, player

#creates and names the window.
window = pyglet.window.Window(600,500)
window.set_caption("Dirt Version 1.0 Beta")


#creates the event loop CONTAINER
event_loop = pyglet.app.EventLoop()

#brings together all the other code from the other files in a neat & compact way.
currentWorld = world.World()




@window.event
def on_draw():
	window.clear()
	currentWorld.draw_world()
	currentWorld.drawn_world.draw()
	#world.pictures.wood.blit(0,500) #uncomment this is you want to print wood to the window.
	
	
@event_loop.event
def on_window_close(window):
	event_loop.exit()
	
pyglet.app.run()

Any other suggestion to improve my code would be appreciated.

 

UPDATE:

for all those interested, (or if it's relevant), my system is a windows 7 x64-bit with a AMD C-60 APU with Radeon(tm) HD Graphics processor, and the version of pyglet that I am using is 1.2alpha1-py3.4, and I am using python 3.4

Edited by Travellingcritic

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement