右には連続で投げてくれるんですが、キャラクターが左を向いて武器を投げる時に問題がありまして。
左にも投げることは出来てますが、連続で投げることができていないのに対し、武器を左に投げるとなぜか武器を右にも投げてしまうんです。私がやりたいのは、キャラクターが武器を左右どちらにでも連続で投げれるようにしたいということです。
コード載せておきます。「ここがおかしい」とか「ここが違くないか?」とかそういったところがあれば是非お願いします。
//攻撃------------------------------------------------------------------------------------------------
void Curlsanattack(void)
{
int i=0;
//Fキー、ボタン1を押下
if( gsKeyState ('F') == GSKS_PRESS ||
gsGetJoyPadState(0,JOYPAD_BUTTON1) == GSKS_PRESS)
{
//カールさんが右向きなら
if( gCurlsan.type == 0 )
{
//鎌の持参を呼ぶ
KamaBringing( (int)gCurlsan.x+160, (int)gCurlsan.y+45,
(int)gCurlsan.w+100, (int)gCurlsan.h+100, (int)gCurlsan.tx+130, (int)gCurlsan.ty+100,
(int)gCurlsan.tw+100, (int)gCurlsan.th+140, gCurlsan.rotate);
gKama[i].type = 0;
}
//カールさんが左向きなら
if( gCurlsan.type == 1 )
{
//鎌の持参を呼ぶ
KamaBringing((int)gCurlsan.x+5, (int)gCurlsan.y+45,
(int)gCurlsan.w+100, (int)gCurlsan.h+100, (int)gCurlsan.tx+130, (int)gCurlsan.ty+100,
(int)gCurlsan.tw+100, (int)gCurlsan.th+140, (float)gCurlsan.rotate);
gKama[i].type = 1;
}
}
}
//****************************************************************
// 鎌の処理
//****************************************************************
#include <stdio.h> //C言語
#include "gs.h" //学内ライブラリ
#include "def.h" //共通定義
#include "Kama.h" //鎌
//変数宣言-------------------------------------------------
OBJ gKama[KAMA_MAX]; //鎌の構造体
int gKamaTimer; //鎌のタイマー
//変数参照-------------------------------------------------
extern gsTexture sKama1; //鎌の右向き
extern gsTexture sKama2; //鎌の左向き
extern gsTexture sKamastick; //鎌 貼る専用
extern OBJ gCurlsan; //カールさんの構造体
//開始------------------------------------------------------------------------------------------------------------
void KamaStart(void)
{
int i;
//鎌の数ループ
for( i=0; i < KAMA_MAX; i++)
{
gKama[i].flg = OFF;
}
gKamaTimer = 0; //鎌を連続で投げるタイマー
}
//メイン----------------------------------------------------------------------------------------------------------
void KamaMain(void)
{
KamaMove(); //移動
KamaInScreen(); //移動範囲の制限
KamaBringingTimer(); //鎌を持つ時間
}
//表示------------------------------------------------------------------------------------------------------------
void KamaDraw(void)
{
int x=0, y=0, w=0, h=0, tx=0, ty=0, tw=0, th=0;
float rotate=0;
gsDraw2D( sKamastick, 15, 50);
//鎌の数ループ
for(int i=0; i < KAMA_MAX; i++)
{
//鎌が存在すれば
if( gKama[i].flg == ON)
{
//鎌が右向きなら
if( gKama[i].type == 0)
{
gsDraw2DPartEx( sKama1, (int)gKama[i].x, (int)gKama[i].y,
(int)gKama[i].w,(int)gKama[i].h,(int)gKama[i].tx,(int)gKama[i].ty,
(int)gKama[i].tw,(int)gKama[i].th,(float)gKama[i].rotate,0x80ffffffff);
}
//鎌が左向きなら
if( gKama[i].type == 1)
{
gsDraw2DPartEx( sKama2, (int)gKama[i].x, (int)gKama[i].y,
(int)gKama[i].w, (int)gKama[i].h, (int)gKama[i].tx, (int)gKama[i].ty,
(int)gKama[i].tw, (int)gKama[i].th, (float)gKama[i].rotate, 0x80ffffffff);
}
}
}
}
//持参-------------------------------------------------------------------------------------------------------------
void KamaBringing(int x, int y, int w, int h, int tx, int ty, int tw, int th, float rotate)
{
int i;
//持参出来ないなら
if( gKamaTimer > 0)
{
return;
}
//鎌の数ループ
for( i=0; i < KAMA_MAX; i++)
{
//持っていなければ
if( gKama[i].flg == OFF)
{
KamaBringingOne(i,x,y,w,h,tx,ty,tw,th,rotate); //持参の実施
break;
}
}
}
//持参の実施------------------------------------------------------------------------------------------------------
void KamaBringingOne(int i, int x, int y, int w, int h, int tx, int ty, int tw, int th, float rotate)
{
gKama[i].flg = ON; //持参する
gKama[i].x = (float)x; //X座標
gKama[i].y = (float)y; //Y座標
gKama[i].w = (float)w; //幅
gKama[i].h = (float)h; //高さ
gKama[i].tx = (float)tx; //画像先のX座標
gKama[i].ty = (float)ty; //画像先のY座標
gKama[i].tw = (float)tw; //画像先の幅
gKama[i].th = (float)th; //画像先のの高さ
gKama[i].rotate = (float)rotate;//画像の回転
gKamaTimer = 1; //持参不可能状態にする
}
//持参するタイマー------------------------------------------------------------------------------------------------
void KamaBringingTimer(void)
{
//鎌タイマーが0より大きいなら
if( gKamaTimer > 0 )
{
gKamaTimer++;//加算する
//タイマーが8より大きいなら
if( gKamaTimer > 8)
{
gKamaTimer = 0; //持てる状態にする
}
}
}
//移動------------------------------------------------------------------------------------------------------------
void KamaMove(void)
{
int i;
//鎌の数ループ
for( i=0; i < KAMA_MAX; i++)
{
if(gKama[i].flg == ON && gCurlsan.flg == ON)
{
//鎌が右向きなら
if( gKama[i].type == 0)
{
gKama[i].rotate -= (float)0.3; //右に回転
gKama[i].x += 6; //右に移動
}
else
//鎌が左向きなら
if( gKama[i].type == 1)
{
gKama[i].rotate += (float)0.3; //左に回転
gKama[i].x -= 6; //左に移動
}
}
}
}
//移動範囲の制限---------------------------------------------------------------------------------------------------
void KamaInScreen(void)
{
int i;
//鎌の数ループ
for(i=0; i < KAMA_MAX; i++)
{
//鎌を持っているなら
if(gKama[i].flg == ON)
{
KamaInScreenOne(i); //鎌の移動範囲の制限の実施
}
}
}
//移動範囲の制限の実施---------------------------------------------------------------------------------------------
void KamaInScreenOne(int i)
{
//鎌が右向きまたは左向きなら
if( gKama[i].type == 0 || gKama[i].type == 1)
{
//鎌のX座標が画面サイズ+50より大きいまたは、鎌のX座標が-30より小さいなら
if( gKama[i].x > GS_WINDOW_WIDTH+50 || gKama[i].x < -30)
{
gKama[i].flg = OFF;
}
}
}
修正すべきところなどあればお願いします。
宜しくお願いします。