はじめまして。最近WonderWitchをはじめたばかりのプログラム初心者です。
タイトルのままなのですが、過去記事を検索してみてもそれらしい記事がなかったので
投稿させていただきました。
32×32(pixel)のスプライトを表示させようとしたのですが、うまく表示できなくて困っています。
そもそも sprite_set_char_locationを16回呼び出すのと
sprite_set_data で1回で呼び出すのとでは何か違いがあるのでしょうか?
↓がうまく表示できなくて困っているソースをそのままコピペしたものです。
リソースは縦32×横32のbmpをそのままbmpcnvで変換した.frファイルです。(4色)
長ったらしいソースですいません。
あと直接関係ありませんが、メーリングリストというものは初めてなのですが、
なにか無作法があったら教えてください。よろしくお願いします。
/* sprt.c
*/
#include <sys/bios.h> #include <stdio.h> #include <stdlib.h> #include <resource.h> typedef unsigned char u_char;
typedef unsigned short u_short; typedef unsigned int u_int; typedef unsigned long u_long; #define DISP_LEFT 0
#define DISP_RIGHT 224 #define DISP_TOP 0 #define DISP_BOTTOM 144 #define TRUE 1
#define FALSE 0 typedef struct _SPRITE_DATA
{ short attr; /*属性、キャラクタ番号*/ BYTE x; /*表示座標X*/ BYTE y; /*表示座標Y*/ }SPRITE_DATA; /*リソースデータ*/
extern void far *_resource; /*スプライトのデータ*/
static SPRITE_DATA sprt_data[16]; /* メイン */
void main(void) { int i,j; int looping; int x, y; int vx, vy; int key; u_char far
*buf; /*リソースのアドレス*/
/*乱数初期化*/
srand((unsigned)sys_get_tick_count());
/*LCDカラーマップに8色を選択*/
lcd_set_color(0x6420, 0xfca8);
/*パレット8番(スプライト用)の色選択*/
palette_set_color(8, 0x7420);
/*表示するものを設定(スプライトのみ表示)*/
display_control(DCM_SPR);
/*リソース(画像)を取得*/
buf = (u_char far*)_resource;
/*ヘッダの部分16Byteを飛ばす*/
buf+=16;
/*画像データをキャラクタにセット*/
font_set_colordata(0, 16, buf);
/*表示するスプライトを設定(0番から16個)*/
sprite_set_range(0, 16);
/*スプライトにキャラクタを割り当てる*/
for( i=0; i<16; i++ ){ /* sprite_set_char(i, i); */ sprt_data[i].attr = i; }
/*速度と位置設定*/
x = 112; y = 72; vx = (rand()%6)-3; vy = (rand()%6)-3; looping =
TRUE;
/*ゲームループ*/ while( looping ){
/*キー入力*/
key = key_hit_check(); if(
key&KEY_A
){
looping = FALSE; }
/*スプライト座標移動*/
/*x += vx; y += vy; */
/*壁にぶつかったら速度反転*/
if( DISP_RIGHT <= x ){ x = DISP_RIGHT; vx *= -1; }else if( DISP_LEFT >= x ){ x = DISP_LEFT; vx *= -1; } if( DISP_BOTTOM <= y ){ y = DISP_BOTTOM; vy *= -1; }else if( DISP_TOP >= y ){ y = DISP_TOP; vy *= -1; }
/*スプライト表示座標設定*/
for( i=0;
i<res_info.height; i++ ){
for(
j=0; j<res_info.width; j++ ){
/* sprite_set_location(i*res_info.width+j,
x+(j<<3), y+(i<<3));*/
sprt_data[(i<<2)+j].x =
x+(j<<3);
sprt_data[(i<<2)+j].y = y+(i<<3); } }
sprite_set_data(0, 16,
sprt_data);
/*VBLANK待ち*/
sys_wait(1); } } /*EOF*/ mail to :loopvenus@newmail.net
web page : http://www11.tok2.com/home/loopvenus/
|