その後、マップデータ(進行可否とマップチップ1個毎の座標)を構造体に保存して表示するところまでできました。
ただ、このままでは描画されただけなのでスクロールを実装してみようと思ったのですが、なかなかうまくいきません・・・。
構造体に保存しているデータと、自分なりに作成したソースを記載します。
どなたかご教授お願いいたします;;
// プレイヤーに関する構造体
typedef struct{
int x,y; // 座標
int type; // 歩行グラフィックの種類
int move; // 歩行グラフィックのコマ数
int walk; // 歩行の有無の判定フラグ
}player_t;
typedef struct{
int data[MAP_MAX_Y][MAP_MAX_X]; // 進行可否判定
int posX[MAP_MAX_Y][MAP_MAX_X]; // マップチップX座標
int posY[MAP_MAX_Y][MAP_MAX_X]; // マップチップY座標
int scroll[MAP_MAX_Y][MAP_MAX_X]; // 指定したチップのスクロール状態
}map_t[MAP_NO];
// スクロールを考慮したマップ描画
void chip_drawing(int mapNo){
for(int i = 0; i < MAP_MAX_Y; i++){
for(int j = 0; j < MAP_MAX_X; j++){
int MTP_X,MTP_Y;
MTP_X = map[mapNo].posX[j] - player.x / 32; if(MTP_X < 0) MTP_X *= -1;
MTP_Y = map[mapNo].posY[j] - player.y / 32; if(MTP_Y < 0) MTP_Y *= -1;
if(map[mapNo].posX[j]%32==0 && map[mapNo].posY[j]%32==0){
map[mapNo].scroll[j] = 0;
if(CheckHitKey(KEY_INPUT_DOWN) && (MTP_Y >= 3 && map[mapNo].data[i+3][j] != '\0') ){
map[mapNo].scroll[j] = 1; // 下方向へスクロール
}else if(CheckHitKey(KEY_INPUT_LEFT) && (MTP_X <= 3 && map[mapNo].data[j-3] != '\0') ){
map[mapNo].scroll[j] = 2; // 左方向へスクロール
}else if(CheckHitKey(KEY_INPUT_RIGHT) && (MTP_X >= 3 && map[mapNo].data[j+3] != '\0') ){
map[mapNo].scroll[j] = 3; // 右方向へスクロール
}else if(CheckHitKey(KEY_INPUT_UP) && (MTP_Y <= 3 && map[mapNo].data[i-3][j] != '\0') ){
map[mapNo].scroll[i][j] = 4; // 上方向へスクロール
}
if(map[mapNo].scroll[i][j] != 0){
if(map[mapNo].scroll[i][j] == 1 && map[mapNo].data[player.y/32+1][player.x/32] != 0){
map[mapNo].scroll[i][j] = 0;
}else if(map[mapNo].scroll[i][j] == 2 && map[mapNo].data[player.y/32][player.x/32-1] != 0){
map[mapNo].scroll[i][j] = 0;
}else if(map[mapNo].scroll[i][j] == 3 && map[mapNo].data[player.y/32][player.x/32+1] != 0){
map[mapNo].scroll[i][j] = 0;
}else if(map[mapNo].scroll[i][j] == 4 && map[mapNo].data[player.y/32-1][player.x/32] != 0){
map[mapNo].scroll[i][j] = 0;
}
}
}
if(map[mapNo].scroll[i][j] == 1){
map[mapNo].posY[i][j] += 2;
}else if(map[mapNo].scroll[i][j] == 2){
map[mapNo].posX[i][j] -= 2;
}else if(map[mapNo].scroll[i][j] == 3){
map[mapNo].posX[i][j] += 2;
}else if(map[mapNo].scroll[i][j] == 4){
map[mapNo].posY[i][j] -= 2;
}
if(map[mapNo].data[i][j] == 1){
DrawRotaGraphF(map[mapNo].posX[i][j]+16,map[mapNo].posY[i][j]+16,1.0,0.0,map_chip[0][0],TRUE);
}
}
}
}
追記:
目標実装としては、自分の進行方向3マス先にマップがあった場合はスクロールを進行方向に行い、
マップがなかった場合はスクロールせず、キャラだけを動かすというものです。
