int GetChipParam(float x,float y){
int cx,cy;
cx=(int)x/CHIP_SIZE;
cy=(int)y/CHIP_SIZE;
if(x>=MAP_WIDTH || y>=MAP_HEIGHT || x<0 || y<0){
return 0;
}
return hantei[cx][cy];
}
// キャラクタをマップとの当たり判定を考慮しながら移動する
int CharMove( float *cx, float *cy, float *DownSP,
float Movex, float Movey, float size, char *p_flag )
{
float Dummy = 0.0F ;
float hsize ;
// キャラクタの左上、右上、左下、右下部分が当たり判定のある
// マップに衝突しているか調べ、衝突していたら補正する
// 半分のサイズを算出
hsize = size * 0.5F ;
// 先ず上下移動成分だけでチェック
{
// 左下のチェック、もしブロックの上辺に着いていたら落下を止める
if( hanteiHitCheck( *cx - hsize, *cy + hsize, &Dummy, &Movey ) == 3 ) *DownSP = 0.0F ;
// 右下のチェック、もしブロックの上辺に着いていたら落下を止める
if( hanteiHitCheck( *cx + hsize, *cy + hsize, &Dummy, &Movey ) == 3 ) *DownSP = 0.0F ;
// 左上のチェック、もしブロックの下辺に当たっていたら落下させる
if( hanteiHitCheck( *cx+ - hsize,*cy-hsize, &Dummy, &Movey ) == 4 ) *DownSP *= -1.0F ;
// 右上のチェック、もしブロックの下辺に当たっていたら落下させる
if( hanteiHitCheck( *cx + hsize, *cy - hsize, &Dummy, &Movey ) == 4 ) *DownSP *= -1.0F ;
// 上下移動成分を加算
*cy += Movey ;
}
// 後に左右移動成分だけでチェック
{
// 左下のチェック
hanteiHitCheck( *cx - hsize, *cy + hsize, &Movex, &Dummy ) ;
// 右下のチェック
hanteiHitCheck( *cx + hsize, *cy + hsize, &Movex, &Dummy ) ;
// 左上のチェック
hanteiHitCheck( *cx - hsize, *cy - hsize, &Movex, &Dummy ) ;
// 右上のチェック
hanteiHitCheck( *cx + hsize, *cy - hsize, &Movex, &Dummy ) ;
// 左右移動成分を加算
*cx += Movex ;
}
// 接地判定
{
// キャラクタの左下と右下の下に地面があるか調べる
if( GetChipParam( *cx - size * 0.5F, *cy + size * 0.5F + 1.0F ) == 0 &&
GetChipParam( *cx + size * 0.5F, *cy + size * 0.5F + 1.0F ) == 0 )
{
// 足場が無かったらジャンプ中にする
*p_flag = TRUE ;
}
else
{
// 足場が在ったら接地中にする
*p_flag = FALSE ;
}
}
// 終了
return 0 ;
}
int MapHitCheck( float cx, float cy,
float *Movex, float *Movey )
{
float afX, afY ;
// 移動量を足す
afX = cx + *Movex ;
afY = cy + *Movey ;
// 当たり判定のあるブロックに当たっているかチェック
if( GetChipParam( afX, afY ) == 1 )
{
float blx, bty, brx, bby ;
// 当たっていたら壁から離す処理を行う
// ブロックの上下左右の座標を算出
blx = (float)( (int)afX / CHIP_SIZE ) * CHIP_SIZE ; // 左辺の X 座標
brx = (float)( (int)afX / CHIP_SIZE + 1 ) * CHIP_SIZE ; // 右辺の X 座標
bty = (float)( (int)afY / CHIP_SIZE ) * CHIP_SIZE ; // 上辺の Y 座標
bby = (float)( (int)afY / CHIP_SIZE + 1 ) * CHIP_SIZE ; // 下辺の Y 座標
// 上辺に当たっていた場合
if( *Movey > 0.0F )
{
// 移動量を補正する
*Movey = bty - cy - 1.0F ;
// 上辺に当たったと返す
return 3 ;
}
// 下辺に当たっていた場合
if( *Movey < 0.0F )
{
// 移動量を補正する
*Movey = bby - cy + 1.0F ;
// 下辺に当たったと返す
return 4 ;
}
// 左辺に当たっていた場合
if( *Movex > 0.0F )
{
// 移動量を補正する
*Movex = blx - cx - 1.0F ;
// 左辺に当たったと返す
return 1 ;
}
// 右辺に当たっていた場合
if( *Movex < 0.0F )
{
// 移動量を補正する
*Movex = brx - cx + 1.0F ;
// 右辺に当たったと返す
return 2 ;
}
// ここに来たら適当な値を返す
return 4 ;
}
// どこにも当たらなかったと返す
return 0 ;
}
これはどのような意味なのでしょうか?
error LNK2019: 未解決の外部シンボル "int __cdecl hanteiHitCheck(float,float,float *,float *)" (?hanteiHitCheck@@YAHMMPAM0@Z) が関数 "int __cdecl CharMove(float *,float *,float *,float,float,float,char *)" (?CharMove@@YAHPAM00MMMPAD@Z) で参照されました。
1>C:\Users\test\Downloads\GameProg\GameProg\Debug\GameProg.exe : fatal error LNK1120: 外部参照 1 が未解決です。