elif event.type == pygame.MOUSEBUTTONDOWN: print pygame.mouse.get_pos() + (25,25) print MAP.blocks[2].point mouse = pygame.mouse.get_pos() rng = mouse[0] - MAP.blocks[2].point[0] rng2 = mouse[1] - MAP.blocks[2].point[1] if rng in range(0,25) and rng2 in range(0,25): print "True" Checks to see if I'm clicking the third square rendered from the text file map.
http://cleanscript.com/Map/Map2 On 9/13/07, Lamonte Harris <[EMAIL PROTECTED]> wrote: > > Whups major flaw forgot to check if the height also. > > On 9/13/07, Lamonte(Scheols/Demonic) <[EMAIL PROTECTED]> wrote: > > > > I'm sort of doing it a big differently, right now I'm just testing, but > > I can tell if my mouse position is in the second square block like so: > > > > elif event.type == pygame.MOUSEBUTTONDOWN: > > print pygame.mouse.get_pos() + (25,25) > > print MAP.blocks[2].point > > mouse = pygame.mouse.get_pos() > > mouse = mouse[0] > > block = MAP.blocks[2].point[0] > > rng = mouse - block > > if rng in range(0,25): > > print "True" > > > > snippet from my script. Since all the squares are 25,25 height and > > width Theres an even amount so it subtracts the first tuple value in the > > mouse position from the first tuple value in the block position then I check > > to see if I ranged with in the width of the block to see if im still in it > > and it works out well. I'm getting to what I want my script to do :). > > > > On 9/13/07, DR0ID < [EMAIL PROTECTED]> wrote: > > > > > > Hi > > > > > > as you can see from the documentation, the mouse event provides you > > > the position: > > > > > > MOUSEMOTION pos, rel, buttons > > > MOUSEBUTTONUP pos, button > > > MOUSEBUTTONDOWN pos, button > > > > > > so no need to use pygame.mouse.get_position() (well it another way to > > > get it, perhaps if you dont have events). > > > > > > I think you can find the tile colliding with the mouse faster doing: > > > > > > x_tile = mouse_pos_x/tile_width > > > y_tile = mouse_pos_y/tile_height > > > > > > instead of using a rect collision function. (well if you have > > > scrolling then you need to add some offsets, > > > but that should not be that difficult). > > > > > > As for the tileset and map I would go the way as Luke has proposed. > > > > > > ~DR0ID > > > > > > > > > > > > > > > > > > > > > Luke Paireepinart schrieb: > > > > Lamonte Harris wrote: > > > >> Problem Solving 1 > > > >> -------- > > > >> Rendering a map switching script. There will be a simple > > > window. At > > > >> the bottom if tge screen it will say pick a map. Using the mouse > > > >> events and positioning I will be able to click on the squares that > > > >> will represent certain maps at the bottom of the screen and the > > > >> different maps will be displayed. > > > >> > > > >> How to do that? > > > >> --- > > > >> First make my "genmap" class then in the __init__ function add 2 > > > >> variables "self.cmap " and "self.blockrect". "self.cmap" would > > > >> represent the current map to be displayed. If there isn't a > > > variable > > > >> assigned then the area above the boxes will not be displayed. Make > > > a > > > >> function to display the tile maps. With that function I would > > > append > > > >> square rects to te " self.blockrect" variable for later use to > > > detect > > > >> if the current mouse position will match any of the rects when I > > > left > > > >> mouse click on the pygame window. In that list, there could be > > > >> tuples inside the list for instance: > > > >> > > > >> self.blockrect = [((0,0,0,0),1)] > > > >> > > > >> The first value in the tuple would be the map rect second value in > > > >> the tuple would represent the map name in the directory to load. > > > >> > > > >> How would I get the current top surface of where my mouse is > > > located? > > > >> Just giving a guess, I was thinking of making a square surface > > > thats > > > >> the same size of the sqaures at the bottom of the screen but the > > > >> sqaures at the bottom of the screen have different possitioning > > > >> meaning its easier to located different maps. Like example: > > > >> > > > >> Pygame Window: > > > >> ---------------------------------------- > > > >> | ___ | > > > >> | |--\_/--| /-\ |___| | > > > >> | |_/\/\_| /---\| | > > > >> | | > > > >> | | > > > >> | | > > > >> -------------------------------------- > > > >> | ------ ------ ------ | > > > >> | | | | | | | | > > > >> | ------ ------ ------ | > > > >> -------------------------------------- > > > >> > > > >> Thats above is the whole window its all one big part but sort of > > > >> seperated if you get what I mean. Probably by a pygame line. > > > >> > > > >> So I was thinking if I made an invisible rect that moved when the > > > >> mouse moved then I left clicked and it would get the current > > > surface > > > >> position of the rect, then it would run a function to see if that > > > >> current position matches any of the map squares at the bottom of > > > the > > > >> screen then the " self.cmap" variable would update. > > > >> > > > >> > > > >> Does anyone think my theory will work, I've only written then down > > > at > > > >> school and is attempting to do this this weekend for some more > > > >> learning with pygame. > > > > It's a little hard to follow. > > > > For example, what is this talk about an invisible rect that follows > > > > the mouse? > > > > All you care about are mouse clicks. So when the mouse clicks (when > > > > you're parsing events and you come across a MOUSEBUTTONDOWN or > > > > whatever the event is called) you just call pygame.mouse.get_pos() > > > and > > > > you have the current position. You don't have to constantly track > > > the > > > > position. > > > > and I'm not sure what your self.blockrect and self.cmap stuff was > > > about. > > > > I would say to do it like this off the top of my head: > > > > import pygame, os > > > > class Tileset(object): > > > > def __init__(self, tiletuplelist): > > > > """tiletuplelist is of the form [(tilename, tilelocation)] > > > > self.tiles = {} > > > > for tilepair in tiletuplelist: > > > > self.tiles[tilepair[0]] = pygame.image.load(tilepair[1]) > > > > > > > > class Map(object): > > > > def __init__(self, mapdata, tileset): > > > > """mapdata is a 2d array of strings that are the tilenames for > > > each > > > > location.""" > > > > self.map = mapdata > > > > self.tileset = tileset > > > > def drawmap(self, location, maxh, maxw, screen): > > > > """location is a tuple""" > > > > #using position and maxwidth and maxheight, and the > > > > #data about the tile sizes from the tileset, you can make sure > > > > #you don't draw out of bounds. > > > > > > > > So basically you'd construct one tileset like this > > > > tiles = Tileset(['grass','grass.bmp','dirt','dirt.bmp']) > > > > Then you'd make a map like this: > > > > map1 = Map([["grass","dirt"],["dirt","grass"]], tiles) > > > > > > > > then whenever you wanted to draw map1 you'd just call map1.draw > > > > and it would draw itself using your tileset. > > > > So if you wanted to change your tileset later you could, easily. > > > > Also, because the tileset is referenced by variable names instead of > > > > > > > indices, it'll be easy to list all possible tiles for selection. > > > > and since each map is a different object, you just have to clear the > > > > screen and call map2.draw() when you want to switch maps. It makes > > > > everything simple. > > > > I'm not claiming the code works or that's the best way to do it, but > > > > that's just what I came up with on first glance. > > > > > > > > Also as you were mentioning earlier, you wanted to use rects of > > > > existing tiles to collide with the mouse to see if they had selected > > > a > > > > tile, but you want them to be able to select any tile, even blank > > > > ones, right? > > > > Blah, there are too many considerations that are going to be > > > > particular to your implementation. You can look at Phil Hassey's PGU > > > > for ideas on tile editors. His is pretty slick. > > > > -Luke > > > > > > > > > > > > > > > > -- > > Join phpdiscovery.com Now! > > >