Re: A89: Programming Problem


[Prev][Next][Index][Thread]

Re: A89: Programming Problem




Same problem as someone else here had before.
you define a 16x8 sprite, but only write sprite data in the right half of it.
the left half of the sprite is all blank.
(thats why it is called sprite16, it handles 16pixel wide sprites)
Your program thinks it moves around a 16x8 sprite.
Isn't there a sprite8 or something like that, to use?
then you should use that when moving 8x8 sprites, and define your sprite data
array as char instead of int.

//Olle

Nathaniel Gibson wrote:
> 
> I wrote the program below just to see if I could get a ball to bounce
> around the screen. Everything works except for when the ball hits the
> left side of the screen: it looks like it hits 8 pixels too soon. Can
> someone please tell me what I'm doing wrong? I think it has something
> to do with the way Sprite16 processes the sprite, but I'm not sure.
> 
> Thanks in advance,
> 
> Nathaniel Gibson
> ngibson@ptd.net
> 
> ----------------------------CODE--------------------------
> #define SAVE_SCREEN
> 
> #include <nostub.h>
> #include <graph.h>
> #include <system.h>
> #include <sprites.h>
> 
> int _ti89;
> 
> int _main()
> {
>         static unsigned int ball [] = {0x3c, 0x7e, 0xff, 0xff, 0xff,
> 0xff, 0x7e, 0x3c};
>         int key, x = 50, y = 50, xChange = 1, yChange = 1;
>         void *kbq = kbd_queue ();
>         long int j;
> 
>         ClrScr ();
> 
>         while (OSdequeue (&key, kbq))   {
> 
>                 if ((x == 0) || (x == 143))     xChange *= -1;
>                 if ((y == 0) || (y == 91))      yChange *= -1;
> 
>                 x += xChange;
>                 y += yChange;
> 
>                 Sprite16(x, y, 8, ball, LCD_MEM, SPRT_XOR);
>                 for ( j = 0; j <= 50000; j++) ;
>                 Sprite16(x, y, 8, ball, LCD_MEM, SPRT_XOR);
>         }
> 
>         return 0;
> }



Follow-Ups: References: