Sprite Text by Orion102411th Sep 2009 2:05
|
---|
Summary Function to paste sprite based characters to the screen Description Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com global display_xmax as integer: global display_ymax as integer global display_xmid as integer: global display_ymid as integer dim character_widths_40pt(44) as integer #Constant CHARACTER_SET_IMAGE_NUMBER 1 #Constant CHARACTER_SET_SPRITE_NUMBER 1 #Constant FALSE 0: #Constant TRUE 1 Rem ------------------------------------------------------- Set_Display_Mode() Load_Character_Set() Initialize_Character_Widths_Array() Rem ======================================================= repeat Paste_Sprite_Text("abcdefghijklmnopqrstuvwxyz", 0, display_ymid, 100, 255, 0, 0) Paste_Sprite_Text("0123456789! @ & * - . ?", 0, display_ymid + 50, 100, 0, 255, 0) Paste_Sprite_Text("orion1024", 0, display_ymid + 200, 50, 0, 0, 255) text 0, display_ymax - 20, "FPS: " + str$(screen fps()) sync until mouseclick() end Rem ======================================================= function Set_Display_Mode() display_xmax = desktop width() display_ymax = desktop height() display_xmid = display_xmax / 2: display_ymid = display_ymax / 2 set display mode display_xmax, display_ymax, 16 sync on: sync rate 60 color backdrop rgb(92, 92, 92) hide mouse endfunction Rem ------------------------------------------------------- Rem - The character set is stored in an animated sprite Rem - Change the path to where the image 'Character_Set_40Pt.bmp" is located function Load_Character_Set() create animated sprite CHARACTER_SET_SPRITE_NUMBER, "Character_Set_40Pt.bmp", 1, 43, CHARACTER_SET_IMAGE_NUMBER hide sprite CHARACTER_SET_SPRITE_NUMBER endfunction Rem ------------------------------------------------------- Rem - Based on a 40Pt font, upper case only Rem - Characters not included in the character set (sprite_frame = 0) are treated as spaces function Paste_Sprite_Text(message as string, screen_x as integer, screen_y as integer, scale as float, red as integer, green as integer, blue as integer) local index as integer local message_length as integer local character as string: local character_value as integer local sprite_frame as integer: local sprite_scale as float local character_offset as integer local default_spacing as integer default_spacing = 5 sprite_scale = scale / 100 scale sprite CHARACTER_SET_SPRITE_NUMBER, sprite_scale * 100 set sprite diffuse CHARACTER_SET_SPRITE_NUMBER, red, green, blue message = upper$(message) message_length = len(message) for index = 1 to message_length character = mid$(message, index) character_value = asc(character) if character >= "A" and character <= "Z" sprite_frame = (character_value - 64) Rem - frames 1 to 26 set sprite frame CHARACTER_SET_SPRITE_NUMBER, sprite_frame paste sprite CHARACTER_SET_SPRITE_NUMBER, screen_x + character_offset, screen_y inc character_offset, character_widths_40pt(sprite_frame) * sprite_scale + default_spacing * sprite_scale else if character >= "0" and character <= "9" sprite_frame = (character_value - 21) Rem - frames 27 to 36 set sprite frame CHARACTER_SET_SPRITE_NUMBER, sprite_frame paste sprite CHARACTER_SET_SPRITE_NUMBER, screen_x + character_offset, screen_y inc character_offset, character_widths_40pt(sprite_frame) * sprite_scale + default_spacing * sprite_scale else if character = "-" then sprite_frame = 37 if character = "." then sprite_frame = 38 if character = "!" then sprite_frame = 39 if character = "?" then sprite_frame = 40 if character = "*" then sprite_frame = 41 if character = "&" then sprite_frame = 42 if character = "@" then sprite_frame = 43 if sprite_frame >= 37 and sprite_frame <=43 set sprite frame CHARACTER_SET_SPRITE_NUMBER, sprite_frame paste sprite CHARACTER_SET_SPRITE_NUMBER, screen_x + character_offset, screen_y inc character_offset, character_widths_40pt(sprite_frame) * sprite_scale + default_spacing * sprite_scale endif if character = " " or sprite_frame = 0 then inc character_offset, 20 * sprite_scale endif endif sprite_frame = 0 next index endfunction Rem ------------------------------------------------------- function Initialize_Character_Widths_Array() local index as integer for index = 1 to 43 read character_widths_40pt(index) next index data 36, 32, 33, 35, 30, 27, 38, 35, 16, 19, 37, 30, 45, 36, 36, 28, 35, 35, 25, 30, 36, 36, 50, 37, 38, 30 data 25, 19, 25, 22, 25, 23, 25, 25, 24, 25 data 15, 8, 10, 20, 23, 39, 48 endfunction Rem ------------------------------------------------------- |