前提・実現したいこと
SDL2でゲームを作っています。
キャラクターの向きを実装中に以下の問題が発生しました。
発生している問題・エラーメッセージ
同じ実行ファイルでも、画像の表示が違くなってしまいます。
該当のソースコード
C
1#include "SDL2/SDL.h" 2#include "SDL2/SDL_image.h" 3 4typedef struct{ 5 SDL_Surface *image_f,*image_b,*image_r, *image_l; 6 SDL_Rect rect, rect_pos, rect_tmp; 7 SDL_Texture *texture_f,*texture_b,*texture_r,*texture_l; 8 SDL_Texture *texture_use; 9}layer_dir; 10 11typedef struct{ 12 SDL_Surface *image_small,*image_middle,*image_large; 13 SDL_Rect rect,rect_pos,rect_tmp; 14 SDL_Texture *texture_small,*texture_middle,*texture_large; 15 SDL_Texture *texture_use; 16}layer_ani; 17 18int Object[20][15] = { 19 {0, 0}, 20 {0, 0}}; 21 22int GetPos(SDL_Rect *from, SDL_Rect *to) 23{ 24 to->x = from->x * 23; 25 to->y = from->y * 31; 26 return 0; 27} 28 29void maketex_dir(layer_dir *,SDL_Renderer*); 30void maketex_ani(layer_ani *undefined,SDL_Renderer *renderer); 31 32void LoadIMG_dir(const char front[20],const char back[20],const char right[20],const char left[20],layer_dir *undefined); 33void LoadIMG_ani(const char small[20],const char middle[20],const char large[20],layer_ani *undefined); 34 35int main(int argc, const char *argv[]) 36{ 37 SDL_Window *Window; 38 SDL_Renderer *renderer; 39 40 int isFinish = 0; 41 int img = 0; 42 43 layer_dir charcter; 44 45 46 SDL_Init(SDL_INIT_EVERYTHING); 47 48 Window = SDL_CreateWindow("Key", 0, 0, 640, 480, SDL_WINDOW_SHOWN); 49 50 renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED); 51 SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); 52 53 LoadIMG_dir("char/front.png","char/back.png","char/right.png","char/left.png",&charcter); 54 55 56 maketex_dir(&charcter,renderer); 57 58 charcter.rect.x = 0; 59 charcter.rect.y = 0; 60 charcter.rect.w = charcter.image_f->w; 61 charcter.rect.h = charcter.image_f->h; 62 63 64 65 Object[1][1] = 1; 66 67 charcter.texture_use = charcter.texture_f; 68 69 charcter.rect_pos = charcter.rect; 70 charcter.rect_tmp = charcter.rect; 71 while (isFinish == 0) 72 { 73 74 SDL_Event event; 75 76 while (SDL_PollEvent(&event)) 77 { 78 switch (event.type) 79 { 80 case SDL_KEYDOWN: 81 { 82 switch (event.key.keysym.sym) 83 { 84 case SDLK_UP: 85 charcter.rect_tmp.y -= 1; 86 charcter.texture_use = charcter.texture_b; 87 break; 88 89 case SDLK_DOWN: 90 charcter.rect_tmp.y += 1; 91 charcter.texture_use = charcter.texture_f; 92 break; 93 94 case SDLK_RIGHT: 95 charcter.rect_tmp.x += 1; 96 charcter.texture_use = charcter.texture_r; 97 break; 98 99 case SDLK_LEFT: 100 charcter.rect_tmp.x -= 1; 101 charcter.texture_use = charcter.texture_l; 102 break; 103 104 case SDLK_ESCAPE: 105 isFinish = 1; 106 break; 107 } 108 } 109 } 110 111 if (charcter.rect_tmp.y < 0 || 112 charcter.rect_tmp.y > 14 || 113 charcter.rect_tmp.x < 0 || 114 charcter.rect_tmp.x > 19 || 115 Object[charcter.rect_tmp.y][charcter.rect_tmp.x] == 1) 116 { 117 charcter.rect_tmp = charcter.rect; 118 } 119 else 120 { 121 charcter.rect = charcter.rect_tmp; 122 } 123 124 125 GetPos(&charcter.rect, &charcter.rect_pos); 126 } 127 128 SDL_RenderClear(renderer); 129 SDL_RenderCopy(renderer, charcter.texture_use, NULL, &charcter.rect_pos); 130 SDL_RenderPresent(renderer); 131 } 132 133 SDL_DestroyRenderer(renderer); 134 SDL_DestroyTexture(charcter.texture_f); 135 SDL_DestroyWindow(Window); 136 137 SDL_Quit(); 138 139 return 0; 140} 141 142void maketex_dir(layer_dir *undefined,SDL_Renderer *renderer){ 143 undefined->texture_f = SDL_CreateTextureFromSurface(renderer,undefined->image_f); 144 undefined->texture_b = SDL_CreateTextureFromSurface(renderer,undefined->image_b); 145 undefined->texture_r = SDL_CreateTextureFromSurface(renderer,undefined->image_r); 146 undefined->texture_l = SDL_CreateTextureFromSurface(renderer,undefined->image_l); 147 148 SDL_FreeSurface(undefined->image_f); 149 SDL_FreeSurface(undefined->image_b); 150 SDL_FreeSurface(undefined->image_r); 151 SDL_FreeSurface(undefined->image_l); 152} 153 154void LoadIMG_dir(const char front[20],const char back[20],const char right[20],const char left[20],layer_dir *undefined){ 155 undefined->image_f = IMG_Load(front); 156 undefined->image_b = IMG_Load(back); 157 undefined->image_r = IMG_Load(right); 158 undefined->image_l = IMG_Load(left); 159} 160 161void maketex_ani(layer_ani *undefined,SDL_Renderer *renderer){ 162 undefined->texture_small = SDL_CreateTextureFromSurface(renderer,undefined->image_small); 163 undefined->texture_middle = SDL_CreateTextureFromSurface(renderer,undefined->image_middle); 164 undefined->texture_large = SDL_CreateTextureFromSurface(renderer,undefined->image_large); 165 166 SDL_FreeSurface(undefined->image_small); 167 SDL_FreeSurface(undefined->image_middle); 168 SDL_FreeSurface(undefined->image_large); 169} 170 171void LoadIMG_ani(const char small[20],const char middle[20],const char large[20],layer_ani *undefined){ 172 173 undefined->image_small = IMG_Load(small); 174 undefined->image_middle = IMG_Load(middle); 175 undefined->image_large = IMG_Load(large); 176 177}
補足情報(FW/ツールのバージョンなど)
gcc animation.c -lSDL2 -lSDL2_Image -lSDL2_ttf -g -o0 -o a.out
でコンパイルしています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。