Hi Tom,

Further resources for doing the work in maths and rendering the results:
I wrote a framework thing called PyStroke a couple of years ago, intended
to avoid sprites altogether and only use collections of lines. Perhaps it
would be useful for you?
https://github.com/PROGRAM-IX/pystroke
Examples of how it might be used are here:
https://github.com/PROGRAM-IX/vectorwars
https://github.com/PROGRAM-IX/identithief

I always meant to share it here, but I never quite got around to writing a
tutorial I was happy with (it was my final year project at university). If
it looks useful and you have any questions I'd be happy to help.

Good luck with your project,

James


James Heslin

program9.com
http://twitter.com/PROGRAM_IX
http://linkedin.com/in/program9

On 26 August 2015 at 07:16, bw <stabbingfin...@gmail.com> wrote:

> Hi, Tom,
>
> Have you considered dealing with space mathematically, and rendering the
> results to screen?
> https://pypi.python.org/pypi/euclid
>
> Here is a different collection of spatial algorithms.
>
> https://bitbucket.org/gummbum/gummworld2/src/6071c5f05c0f2526f5951a08581aefe61d5e4909/gamelib/gummworld2/geometry.py
>
> Gumm
>
>
> On 8/25/2015 4:25 PM, tom arnall wrote:
>
>> I spoke too soon. the use of draw.line() won't work for my application.
>>
>> I need to be able to easily detect when the line touches a moving
>> target. Therefore AFIK I need the line to be either a surface or drawn
>> on a surface, so I can use the surface Rect to check when the  line
>> collides with a target. I can't see a way to use a line created by
>> draw.line() to do this.
>>
>> I also would like the line to behave like the example you referenced,
>> i.e. to rotate around one of its endpoints, not its center, but this
>> is a nice-to-have feature; it would also work if the line surface just
>> rotated around its center.
>>
>> Tom Arnall
>>
>> .....
>> “I have no special talents, only a passionate and stubborn curiosity.”
>> Albert Einstein
>>
>>
>>
>>
>>
>> On 8/25/15, Paul Vincent Craven <p...@cravenfamily.com> wrote:
>>
>>> I'm not sure why you are creating a new surface everytime. Or why you
>>> create one at all?
>>>
>>> Is this similar to what you are looking for?
>>>
>>> http://programarcadegames.com/python_examples/f.php?file=radar_sweep.py
>>>
>>> Paul Vincent Craven
>>>
>>> On Tue, Aug 25, 2015 at 3:57 PM, tom arnall <kloro2...@gmail.com> wrote:
>>>
>>> I want to rotate a line around a point. The code that follows does
>>>> this, BUT when it draws a line, it leaves next to the line its ghost.
>>>> Is this a problem with pygame, or is there a change I can make in the
>>>> code which will make the problem go away?
>>>>
>>>>
>>>> import pygame, sys
>>>> from pygame.locals import *
>>>> import time
>>>>
>>>> pygame.init()
>>>>
>>>> #create a surface that will be seen by the user
>>>> screen =  pygame.display.set_mode((400, 400))
>>>>
>>>> #create a varible for degrees pf rotation
>>>> degree = 0
>>>> while True:
>>>>
>>>>      for event in pygame.event.get():
>>>>          # quit the game if escape is pressed
>>>>          if event.type == QUIT:
>>>>              sys.exit()
>>>>          elif event.type == KEYDOWN and\
>>>>                  event.key == K_ESCAPE:
>>>>              sys.exit()
>>>>
>>>>      #clear screen at the start of every frame
>>>>      screen.fill((40, 40, 40))
>>>>
>>>>      #create new surface with white BG
>>>>      surf =  pygame.Surface((1000, 5))
>>>>      surf.fill((255, 255, 255))
>>>>      #set a color key for blitting
>>>>      surf.set_colorkey((255, 0, 0))
>>>>
>>>>
>>>>      ##ORIGINAL UNCHANGED
>>>>      #where will the static image be placed:
>>>>      where = (0,200)
>>>>
>>>>      #draw surf to screen and catch the rect that blit returns
>>>>      blittedRect = screen.blit(surf, where)
>>>>
>>>>      ##ROTATED
>>>>      #get center of surf for later
>>>>      oldCenter = blittedRect.center
>>>>
>>>>      #rotate surf by DEGREE amount degrees
>>>>      rotatedSurf =  pygame.transform.rotate(surf, degree)
>>>>
>>>>      #get the rect of the rotated surf and set it's center to the
>>>> oldCenter
>>>>      rotRect = rotatedSurf.get_rect()
>>>>      rotRect.center = oldCenter
>>>>
>>>>      #draw rotatedSurf with the corrected rect so it gets put in the
>>>> proper
>>>> spot
>>>>      screen.blit(rotatedSurf, rotRect)
>>>>
>>>>      #change the degree of rotation
>>>>      degree += 5
>>>>      if degree > 360:
>>>>          degree = 0
>>>>
>>>>      #show the screen surface
>>>>      pygame.display.flip()
>>>>
>>>>      #wait 60 ms until loop restart
>>>>      pygame.time.wait(60)
>>>>
>>>>
>

Reply via email to