home *** CD-ROM | disk | FTP | other *** search
/ ARM Club 3 / TheARMClub_PDCD3.iso / mag_discs / 11 / sprite2 / PART_2
Text File  |  1994-02-15  |  5KB  |  121 lines

  1. +--------------------------------------------+
  2. |           SPRITE HANDLING PART 2           |
  3. |         Moving and Scaling Sprites         |
  4. |          © Atle Mjelde Bårdholt            |
  5. |             - The ARM Club -               |
  6. |            15th February 1994              |
  7. |                                            |
  8. +--------------------------------------------+
  9.  
  10. This article is the second part of my Sprite Handling series.
  11. The first part was included in Eureka Issue 10. If you don`t have this part,
  12. then either contact me or The ARM Club.
  13.  
  14. MOVING Sprites is almost the same as displaying. When you display a sprite,
  15. you tell the computer at what x and y position the sprite should be displayed
  16. from. Beware that this x and y value is the down-left corner of the sprite.
  17. So in short terms it is just a matter of altering these x and y values in some
  18. routines. Like moving up(y+)/down(y-), left(x-)/right(x+), circles and so on.
  19. You must also remember that different modes have different x/y borders.
  20.  
  21. An example of a Mode 13 screen :
  22.  
  23.    ^ (0,1023)                      (1279,1023) ^
  24.    |                                           |
  25.    |           __________                      |
  26.    |          |          |                     |
  27.    |          |  SPRITE  |                     |
  28.  y |          |__________|                     |
  29.    |        (x,y)                              |
  30.    |                                           |
  31.    |                                           |
  32.    |                                           |
  33.    | (0,0)                             (1279,0)|
  34.    |___________________________________________|
  35.                         x
  36.  
  37. This parts Sprite example (!Sprite2), includes the ball and some sprites that
  38. contain some useful information. You can move the ball up/down if you click
  39. select with the pointer over the Up or Down sprites. The ball can be scaled
  40. with Menu or Adjust clicks and be restored with a Select click.
  41. If you have scaled the ball down to far, you might need to click Select several
  42. times to restore it.
  43.  
  44. I will here describe some of the BBC BASIC code found in the listing :
  45.  
  46. When you want to move sprites on the screen you need to use screen banks.
  47. This is used to avoid flickering. I use two variables sc1% and sc2% as
  48. screen bank 1 and screen bank 2.
  49.  
  50. Use : Do a screens work then swap banks and then a screens work .......
  51. The routine :
  52.  
  53. DEF PROCupdate_screen
  54.  WAIT          : REM Wait for vertical sync
  55.  SYS 6,112,sc1%
  56.  SYS 6,113,sc2%
  57.  SWAP sc1%,sc2%: REM Exchange the contents of the two variables
  58.  CLS           : REM Clear the screen
  59. ENDPROC
  60.  
  61. The main Mouse check routine :
  62.  
  63.  MOUSE x,y,z : REM Reads the mouse position and status
  64.  CASE z OF
  65.          REM Mouse Adjust zooms out
  66.   WHEN 1:!scale% += 40:scale%!4 += 40
  67.          REM Mouse Menu zooms in
  68.   WHEN 2:!scale% -= 40:scale%!4 -= 40
  69.          REM Mouse Select checks position/restores sprite
  70.   WHEN 4:PROCcheck_pointer
  71.          REM Click on all = END
  72.   WHEN 7:END
  73.  ENDCASE
  74.  
  75. To scale sprites, we need to define some memory :
  76.  
  77.  DIM scale% 16  : REM allocate space for a byte array
  78.  !scale%   = 640: REM x multiplier  <- Alter these values to
  79.  scale%!4  = 640: REM y multiplier     see what they do !
  80.  scale%!8  = 640: REM x divisor
  81.  scale%!12 = 640: REM y divisor
  82.  
  83. And to display the scaled sprite :
  84.  
  85.  SYS sprite%,&234,sprite_area%,sprite_addr_1%,50,y_ball%,0,scale%,-1
  86.               R0       R1           R2        R3   R4    R5  R6   R7
  87.  
  88.  R0 = &234 : This is 512 + 52 : 512 is a pointer to user sprite area
  89.                                 52 is the "Put sprite scaled" command
  90.  
  91.  R1 = sprite_area% : Our pointer to the defined sprite area block
  92.  
  93.  R2 = sprite_addr_1% : Pointer to the address where we have our sprite
  94.  
  95.  R3 = the x coordinate
  96.  
  97.  R4 = the y coordinate
  98.  
  99.  R5 = plot action : 0 = Overwrite colour on screen with sprite pixel colour
  100.  
  101.  R6 = the scale factors
  102.  
  103.  R7 = pixel translation table
  104. -------------------------------------------------------------------------------
  105.  
  106. In the next article I will explain ARM & Sprites.
  107.  
  108. See you then !
  109.  
  110. -------------------------------------------------------------------------------
  111. Please feel free to contact me if you have any questions about
  112. sprites or if you want me to cover some other topic(s) of the sprite
  113. world. Please mark all post Subject : Sprites
  114.                             ^^^^^^^^^^^^^^^^^
  115. E-mail: atle.baardholt@kih.no
  116.  
  117. Regular mail: Atle Mjelde Bårdholt
  118.               Schlanbuschvei 8
  119.               N-3600 Kongsberg
  120.               Norway
  121.