スプライトを表示するCファイルにとりあえず書く関数>> :mySprite *s_○○_new(myAnimeArea *area); *main文から与えるareaに対してスプライトを作成 *mySprite *○○ = my_sprite_new(area, bg_pic, 20, (GSourceFunc)s_bg_init, (GSourceFunc)s_bg_move); *bg_picには画像のソースを指定(static gchar *〇〇_pic = "image/〇〇.png"みたいな感じ) *第4引数はスプライトを初期化する関数を指定 *第5引数はスプライトを動かす関数を指定 *return 〇〇で〇〇を返す :void s_〇〇_init(mySprite *sprite); *表示したいスプライトの初期座標を指定する *一度だけ呼ばれる ---
sprite->x = 0; sprite->y = 0; sprite->dx = -2;--- のように初期化しておくと、最初にmain文で呼んだ時にx=0,y=0,dx=-2の状態で呼ばれる :void s_〇〇_move(mySprite *sprite); *この関数で動きを定義する *この関数はループする関数 ---
myAnimeArea *area = sprite->anime_area; gint x = sprite->x; gint y = sprite->y; gint dx = sprite->dx, dy = sprite->dy; gint width = sprite->width; gint height = sprite->height;--- でとりあえずスプライトの値をとっておいて、xやy座標にいろいろ足したり引いたりして最終的に、 *sprite->x = x; で値を戻すと、そのx座標にスプライトが表示される *座標は特に指定しない限りは左上がゼロ *これだけかければ、main文からs_〇〇_new(area)を呼ぶことで画面に表示できる(はず) <<スプライトの動かし方とか>> *動きはs_〇〇_move中で定義する *例えば、dx = -2;のように書き、sprite->x = x + dx;などと書くとs_〇〇_move関数が一回実行されるたびにxの座標が-2ずつ減る <
GList *sprites = area->sprites; sprites = g_list_last(sprites); gpointer sprite; while(sprites!=NULL) { sprite = sprites->data; my_sprite_draw((mySprite *) sprites->data); sprites = g_list_previous(sprites); }--- のように書き換える <<画像の左右切り替え>> *あらかじめスプライトの書く座標をとっておいてから、その座標を使ってmy_sprite_newする *初期化する部分の関数は新たに作っておく *指定する画像を書き換えたい画像にする <<スムーズなスクロール>>