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!

Reply via email to