Hello again. Thank-you for this! I now have a beautifully blitting tile system! Thanks so much for the assistance!
Andy On 16 June 2013 13:59, Andrew Barlow <andrew.bar...@gmail.com> wrote: > Hi Radomir, > > Thank-you for the clarification! > > Just a quick question regarding this solution before I attempt to > implement it. > > If a FULL tiles height is 80px, but only 40px is visible due to the > overlap (except in the bottom row). How many pixels are each of the letters > you've described? 20px or 40px? > > Cheers > > On 16 June 2013 12:44, Radomir Dopieralski <pyg...@sheep.art.pl> wrote: > >> Let me clarify. >> >> Looking from the side, you have something like this: >> >> a.. >> Ab. >> .Bc >> ..C >> >> where small letter is the top part of a tile, and capital letter is a >> bottom part and horizontal axis is time. Now, what you are doing right now >> is: >> >> 1. blit the bottom tile: >> >> a..a >> Ab.A >> .Bc. >> ..C. >> >> >> 2. blit your current tile: >> >> a..a. >> Ab.Ab >> .Bc.B >> ..C.. >> >> 3. blit the top tile: >> >> a..a.. >> Ab.Ab. >> .Bc.Bc >> ..C..C >> >> As you pointed out, this damages the tiles that are further down or up in >> that column. Now, what you need to do is to modify your top and bottom tile >> blitting like so: >> >> 1. blit just the bottom half of the bottom tile: >> >> a... >> Ab.A >> .Bc. >> ..C. >> >> 2. blit your current tile whole: >> >> a.... >> Ab.Ab >> .Bc.B >> ..C.. >> >> 3. blit the top part of your top tile: >> >> a..... >> Ab.Ab. >> .Bc.Bc >> ..C... >> >> This way you don't damage the other neighboring tiles. >> >> I hope that helps. >> >> >> >> >> >> >> >> On Sun, Jun 16, 2013 at 1:36 PM, Andrew Barlow >> <andrew.bar...@gmail.com>wrote: >> >>> Hello, >>> >>> Thank-you for your quick response. >>> >>> Unfortunately, because a unit is "taller" than a tile, their head pokes >>> over the top of the tile above (the overlap causing the depth) - which is >>> where the feet of the unit in the tile above are. >>> >>> So, erasing the first tile, means you lose the feet of the tile above. >>> If you run the code provided, you'll see what I mean. >>> >>> The code simply draws a wall on the grid. Then at random intervals, it >>> draws a unit in either the tile above the wall, or the tile just above >>> that. If a unit is already in the randomly chosen tile, it attempts to >>> remove it. The "remaning" head problem can be seen clearly from just >>> running this for a few seconds. >>> >>> Any code change advice is hugely welcomed here! >>> On 16 June 2013 12:30, Radomir Dopieralski <pyg...@sheep.art.pl> wrote: >>> >>>> The trick is no not redraw the neighboring tiles in whole, but just >>>> the parts that overlap with your current tile. Then they won't mess >>>> *their* neighboring tiles. >>>> >>>> >>>> On Sun, Jun 16, 2013 at 1:19 PM, Andrew Barlow <andrew.bar...@gmail.com> >>>> wrote: >>>> > Hello, >>>> > >>>> > I have a fairly frustrating problem I am trying to solve. It's pretty >>>> > complicated to explain, so I'll do my best. >>>> > >>>> > I am trying to use the depth effect of StarPusher >>>> > ( >>>> http://inventwithpython.com/blog/2011/06/13/new-game-source-code-star-pusher-sokoban-clone/ >>>> ) >>>> > to make my own game. I'm not using their code exactly, just the >>>> method of >>>> > blitting images in a grid, where the images are taller than the grid >>>> to >>>> > create depth. However, I wish to use large maps (60x60 tiles) which >>>> means >>>> > that iterating over the entire dict of tiles each frame takes a long >>>> time to >>>> > blit. >>>> > >>>> > Of course, I could only redraw the map when I need to, but this means >>>> that I >>>> > couldn't have units of tiles animated as I'd have to draw the whole >>>> map each >>>> > frame of animation (which is SLOW). I'd like to be able to simply >>>> pick a >>>> > tile from the dict and call a render method on it, and it only blit >>>> that >>>> > tile (or nesc. area). The problems come when trying to render just a >>>> single >>>> > tile due to a unit moving onto it (or appearing and disappearing in my >>>> > case). >>>> > >>>> > One solution may just be to blit the entire column if anything in that >>>> > column has changed, but if I have a unit in every column animating, I >>>> may as >>>> > well just redraw the entire map each frame, which takes AGES. >>>> > >>>> > At the moment I'm trying: >>>> > >>>> > Draw the originally rendered map with unit onto the tile and the tile >>>> below >>>> > Draw the unit onto the tile >>>> > Draw any unit onto the tile below >>>> > >>>> > However, this doesn't work as the first tile's head gets left behind. >>>> If I >>>> > then extend the first erase to cover the head, I lose the feet of any >>>> unit >>>> > standing in the tile above! >>>> > >>>> > I know all this sounds a bit weird, but its very hard to explain >>>> without >>>> > seeing it in action. >>>> > >>>> > The code is fairly big (about 5 files of python, 500 lines max) of >>>> > unfinished code. It can be downloaded from here; >>>> > https://dl.dropboxusercontent.com/u/8301679/BlttingIssue.zip >>>> > >>>> > I hope I've vaguely explained it - maybe its simply not possible >>>> trying to >>>> > do what i'm trying to do - but some advise would be hugely welcome! >>>> > >>>> > Cheers, >>>> > >>>> > Andy >>>> >>>> >>>> >>>> -- >>>> Radomir Dopieralski, http://sheep.art.pl >>>> >>> >>> >> >> >> -- >> Radomir Dopieralski, http://sheep.art.pl >> > >