Re: A89: Programming Problem


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

Re: A89: Programming Problem




Just an update... I tried this Scott and it still doesn't work... the 
funky line is still there.


Nathaniel Gibson
ngibson@ptd.net


>bah... ignore all that... I just read the doc. There really should be a
>8x8 version
>
>Scott Dial wrote:
>>
>>  I think you're mistaken, although I have no experience with this
>>  "library" routine. An integer is 16 bits wide, which is what the routine
>>  (should) expect. So your sprite should be like this:
>>
>>  static unsigned int ball[] = {0x3c00, 0x7e00, 0xff00, 0xff00,
>>  0xff00,0xff00, 0x7e00, 0x3c00,0,0,0,0,0,0,0,0};
>>
>>  Note the 8 extra zeros. This is a 16x16 sprite routine, so I would
>>  assume it needs to be that
>>
>>  Nathaniel Gibson wrote:
>>  >
>>  > I've tried that but then the sprite looks really ugly, nothing like
>>  > what was intended. I think it's because Sprite16 expects and unsigned
>>  > int, but to do it that way, I need to redefine the array as an
>>  > unsigned long int. Any thoughts?
>>  >
>>  > Nathaniel Gibson
>>  > ngibson@ptd.net
>>  >
>>  > >ok. to bad. There really should be a sprite8 routine.
>>  > >But thats your problem anyway.
>>  > >put your sprite-data in the left part of the sprite instead (just
>>  > >add 00 at the
>>  > >end of every number, 0x3c becomes 0x3c00 and so on)
>>  > >and let it go from 0 to 151.  that should work. but it's an 
>>ugly sollution :)
>>  > >
>>  > >//Olle
>>  > >
>>  > >Nathaniel Gibson wrote:
>>  > >>
>>  > >>  No, there isn't a Sprite8 routine, and I'm not well-versed enough to
>>  > >>  write one myself. I understand that I'm moving a sprite that is
>>  > >>  actually 16x8, that's why the check in the x direction is at 0 and
>>  > >>  143, and not 0 and 151. The problem is Sprite16 doesn't accept a
>>  > >>  negative number for the location of the sprite, otherwise I would use
>>  > >>  -8 and 143.
>>  > >>
>>  > >>  >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;
>>  > >>  >>  }
>>
>>  --
>>  Scott "Wrath" Dial
>>  wrath@calc.org
>>  ICQ#3608935
>>  Member of TCPA - tcpa.calc.org
>>  _____________________________________________
>>  NetZero - Defenders of the Free World
>>  Click here for FREE Internet Access and Email
>>  http://www.netzero.net/download/index.html
>
>--
>Scott "Wrath" Dial
>wrath@calc.org
>ICQ#3608935
>Member of TCPA - tcpa.calc.org
>_____________________________________________
>NetZero - Defenders of the Free World
>Click here for FREE Internet Access and Email
>http://www.netzero.net/download/index.html




References: