[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [pygame] Fwd: [Tutor] A more Pythonic way to do this
Hi Denise.
Sorry, I should have been clearer in my previous response. I was trying
to imply with the snippet that you should change the constructor of the
enemy instances to be something like this:
class Enemy....
...
def __init__( self, x, y, level ):
self.level = level
# this is the x that will be changed (you're probably using a rect
# here or something)
self.x = x
# keep the initial x around for when we respawn
self.initialx = x
self.y = y
# keep the initial x around for when we respawn
self.initialy = y
...
Hopefully this is less, not more, confusing.
-sjbrown
On Wed, 6 Jul 2005, D. Hartley wrote:
> Shandy,
>
> The reason I was setting Enemy.initialx/y there was because I was
> using the createEnemies function to update the enemies' self.initialx
> values (when they are created) from 0 to whatever the starting
> position is, that way later I can reset each enemy's position to its
> initialx/y.
>
> Otherwise, I didnt even HAVE an initialx/y, and when I created the new
> enemies, I just did this:
>
> enemyship_sprites.add(Enemy((cols*60)+20, (rows*40)+30, level))
>
> The only reason to have 'newx' or 'initialx' was to find a way to
> store each ship's original position so that I could later return the
> ship to that original position.
>
> At this point, it's still returning ALL the enemyships to 0,0.
>
> (although it IS recording their initialx/y or newx/y values - I can
> see that from the print statement. It's just that when I do the
>
> for enemy in (enemyship_sprites.sprites()):
> print enemy.initialx, enemy.initialy
> enemy.rect.centerx = enemy.initialx
> enemy.rect.centery = enemy.initialy
>
> code, it resets them all to 0,0 (the default value of
> initialx/initialy which I was trying to update in the createEnemies
> function by doing
>
> > Enemy.initialx = (cols*60)+20
> > Enemy.initialy = (rows*40)+30
> > enemyship_sprites.add(Enemy(Enemy.initialx, Enemy.initialy, level))
> > print Enemy.initialx,
> > print Enemy.initialy
>
> Is there a way I can update this value and store it for each enemyship
> instance so I can refer to it later and reset the ship back to that
> position? If I do
>
> newX = (cols*60)+20
> newY = (cols*60)+20
> newEnemy = Enemy(newX, newY, level)
> enemyship_sprites.add( newEnemy )
>
> It does make the createEnemies function somewhat clearer, but does not
> update the initialx/initialy.
>
> Please let me know if I'm being unclear about what I'm trying to do.
>
> Thanks,
> Denise
>
> On 7/6/05, Shandy Brown <sjbrown@xxxxxxxxx> wrote:
> > Hi Denise.
> >
> > I would just generally recommend the rule of thumb of not using class
> > attributes unless you really need them (implementing a Singleton or
> > something). You're using class attributes again here:
> >
> > > Enemy.initialx = (cols*60)+20
> > > Enemy.initialy = (rows*40)+30
> > > enemyship_sprites.add(Enemy(Enemy.initialx, Enemy.initialy, level))
> > > print Enemy.initialx,
> > > print Enemy.initialy
> >
> > Try to avoid writing Enemy.initalx anywhere in your code. You could
> > rewrite the above as this:
> >
> > newX = (cols*60)+20
> > newY = (cols*60)+20
> > newEnemy = Enemy(newX, newY, level)
> > enemyship_sprites.add( newEnemy )
> >
> > It's also a bit more readable like this, I think. (Another rule of thumb:
> > never sacrifice clarity for brevity)
> >
> > -sjbrown
> >
>