In fact, due to my inexperience in pygame, I didn't know where to treat
events - in the main class of the game or in the objects that the event
affects. So, part of the event handling is in the main class and part in the
objects, what I think is bad practise of programming.

So I also wanted to ask wich is best, handle events in the main class or in
the objects...


--
Thiago Henrique Petruccelli


On Tue, Nov 17, 2009 at 3:04 PM, Thiago Petruccelli <
[email protected]> wrote:

> so, I kind of did that. But the var name is dragging instead of held. when
> dragging is true, it didnt run the code of removing. Else, it checks and
> removes. But what happens is that it first puts the tile, and then removes
> it, with the same click... I thought the mousebuttondown was still on the
> event queue so I tried to clear it, also without succes...
>  --
> Thiago Henrique Petruccelli
>
>
>
> On Tue, Nov 17, 2009 at 2:59 PM, Henrique Nakashima <
> [email protected]> wrote:
>
>> Oh, I see. In this case, I would use a variable 'held' to indicate the
>> tile that is picked up. 'held' would be None if the no tile is held.
>>
>> When a mouse down event is received, if there is a piece in 'held'
>> (held is not None), place it. If 'held' is None, then remove the tile
>> at the mouse location.
>>
>> On Tue, Nov 17, 2009 at 14:53, Thiago Petruccelli
>> <[email protected]> wrote:
>> > Henrique, the pŕoblem is that when dragging, the mouse button down don't
>> > need to be held all the time; it's one click to pick the tile and
>> another
>> > one to put it in the area.
>> >
>> > --
>> > Thiago Henrique Petruccelli
>> >
>> >
>> > On Tue, Nov 17, 2009 at 2:51 PM, Thiago Petruccelli
>> > <[email protected]> wrote:
>> >>
>> >> ok. :)
>> >>
>> >> this is a function of GameFloor class; the event handler. It puts the
>> tile
>> >> in the floor if it's in a valid position:
>> >>
>> >> def handle_events(self, event):
>> >>         if event.type == MOUSEBUTTONDOWN:
>> >>             if self.dragging == True:
>> >>                 self.dragging = False
>> >>
>> >>                 #tests if tile is on a free position
>> >>                 if self.free_position(self.d_tile.rect):
>> >>                     self.tiles.append(self.d_tile)
>> >>                     return True ##tile was succesfully inserted
>> >>                 else:
>> >>                     #tile can't be inserted in this position
>> >>                     self.display.remove(self.d_tile)
>> >>                     return False #tile didn't fit
>> >>
>> >>         return True
>> >>
>> >> this is the code that remove the tile, in the main game class
>> (GamePlay)
>> >> event handling method:
>> >>
>> >>                 if not self.floor.dragging: #floor is a GameFloor
>> object
>> >>
>> >>                     #remove a tile
>> >>                     for i in range(len(self.piso.tiles)):
>> >>                         if self.piso.tiles[i].hit_test():
>> >>
>> >>
>> self.piso.display.remove(self.piso.tiles[i])
>> >>                             self.piso.tiles.remove(self.piso.tiles[i])
>> >>                 else:
>> >>                     if self.floor.handle_events(event) == False:
>> >>
>> >>                         self.tmp_tile.qt = 1
>> >>                         self.loja.player.add_tile(self.tmp_tile) #gives
>> >> back to the player the tile that didn't fit
>> >> --
>> >> Thiago Henrique Petruccelli
>> >>
>> >>
>> >> On Tue, Nov 17, 2009 at 2:34 PM, Thiago Chaves <[email protected]>
>> >> wrote:
>> >>>
>> >>> Sure, share the code.
>> >>>
>> >>> -Thiago
>> >>>
>> >>> On Tue, Nov 17, 2009 at 6:26 PM, Thiago Petruccelli
>> >>> <[email protected]> wrote:
>> >>> > Hi!
>> >>> >
>> >>> > I am making a game in wich the player has to fill an area with
>> tiles.
>> >>> > It's
>> >>> > an educational game. But I got a problem with pygame events...
>> Actually
>> >>> > I
>> >>> > think it's a simple problem, but I don't know how to solve.
>> >>> >
>> >>> > There are two functionalities for the left click of the mouse: the
>> >>> > first is
>> >>> > to put a tile in the area, when dragging one tile, and the other is
>> to
>> >>> > remove one tile of the area (when not dragging). The problem is
>> that,
>> >>> > when I
>> >>> > put both codes together, the two things happen at the same time - it
>> >>> > puts
>> >>> > the tile and then removes it. I've tried to block the removal of the
>> >>> > tile
>> >>> > setting a variable, "placed", which blocks the action of removing
>> the
>> >>> > tile
>> >>> > until the next event handling. But it didn't work.
>> >>> >
>> >>> > Can someone help me solve this?
>> >>> >
>> >>> > Thanks in advance,
>> >>> > --
>> >>> > Thiago Henrique Petruccelli
>> >>> >
>> >>
>> >
>> >
>>
>
>

Reply via email to