ページ 1 / 1
C++のクラスについて
Posted: 2012年9月29日(土) 01:53
by クールアイス
こんばんは。
C++とシューティングの練習にとインベーダーゲームを作ろうとしています。
しかし、自機を表示、移動はすぐに出来たのですが、自機の弾が異常な動きをしてしまいます。
以下の通りに作っているのですが、弾の速度が弾の最大数が増えるにつれどんどん早くなってしまうのです。
おそらくクラスの管理がおかしいのだと思いますが、どうにもわかりません。
どこが間違っているのか教えていただけないでしょうか。
必要であれば他の.cppや.hも書きます。
コード:
#include"DxLib.h"
#include"Const.h"
#include"key.h"
#include"player.h"
// プレイヤーショットクラス
class CPlayerShot
{
public:
int img; // 画像
int flag; // フラグ
double x,y; // 座標
double sp; // 移動速度
public:
void Load(); // 読み込み
void Initialize(); // 初期化
void Move(); // 移動
void Draw(); // 描画
void Enter(); // データ登録
};
CPlayer player; // プレイヤー
CPlayerShot playerShot[PLAYER_SHOT_MAX]; // プレイヤーショット
//----------------------------------------------
// プレイヤーショット読み込み
//----------------------------------------------
void CPlayerShot::Load()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// プレイヤーショット画像
playerShot[i].img = LoadGraph("画像/p_bullet.png");
}
}
//----------------------------------------------
// プレイヤーショット初期化
//----------------------------------------------
void CPlayerShot::Initialize()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].x = 0.0; // 座標x
playerShot[i].y = 0.0; // 座標y
playerShot[i].flag = 0; // フラグ
playerShot[i].sp = 7.0; // 移動速度
}
}
//----------------------------------------------
// プレイヤーショット描画
//----------------------------------------------
void CPlayerShot::Draw()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// フラグが立っていたら
if(playerShot[i].flag == 1)
{
// プレイヤーショット(座標は画像の中心)
DrawRotaGraphF(playerShot[i].x, playerShot[i].y, 1.0f, 0.0f, playerShot[i].img, true);
}
}
}
//----------------------------------------------
// プレイヤーショット移動
//----------------------------------------------
void CPlayerShot::Move()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// フラグが立っていたら
if(playerShot[i].flag == 1)
{
// 上へ
playerShot[i].y -= playerShot[i].sp;
// 画面外
if(playerShot[i].y < (0 - PLAYER_SHOT_SIZE / 2))
playerShot[i].flag = 0;// フラグ初期化
}
}
}
//----------------------------------------------
// プレイヤーショットデータ登録
//----------------------------------------------
void CPlayerShot::Enter()
{
// Zキーが押された
if(CKey::KeyState(KEY_INPUT_Z) == 1)
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// フラグが立っていなかったら
if(playerShot[i].flag == 0)
{
playerShot[i].flag = 1; // フラグを立てる
playerShot[i].x = player.x; // プレイヤーの座標xに合わせる
playerShot[i].y = player.y; // プレイヤーの座標yに合わせる
break;
}
}
}
}
// プロトタイプ宣言=========================================================
void WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
//===========================================================================
// メイン
//===========================================================================
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
//===========================================================================
// 三大初期化
//===========================================================================
//WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
ChangeWindowMode(true); // ウィンドウモード
DxLib_Init(); // DXライブラリ初期化
SetDrawScreen(DX_SCREEN_BACK); // 裏画面設定
//===========================================================================
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].Load(); // プレイヤーショット読み込み
playerShot[i].Initialize(); // プレイヤーショット初期化
}
player.Load(); // プレイヤー読み込み
player.Initialize();// プレイヤー初期化
//===========================================================================
// メインループ
//===========================================================================
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
CKey::UpdateKey(); // キー処理
if(CKey::KeyState(KEY_INPUT_ESCAPE) == 1) break; // エスケープで終了
player.Move(); // プレイヤー移動
player.Draw(); // プレイヤー描画
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].Enter(); // プレイヤーショットデータ登録
playerShot[i].Move(); // プレイヤーショット移動
playerShot[i].Draw(); // プレイヤーショット描画
}
// デバッグ用
DrawFormatString(0,0,GetColor(255,255,255),"player.x = %f",player.x);
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
あと、先日ここに登録したのですが、毎回自分の環境とか技術力を書いたほうがいいでしょうか?
Re: C++のクラスについて
Posted: 2012年9月29日(土) 03:21
by クールアイス
試しに構造体で以下のように書き直してみたところ、異常は見られませんでした。
先ほどのものは配列のループで毎回関数を呼び出しているのが原因なのかな?と思うのですが、上手く書き方が分かりません。
どのように書けばクラスを用いた状態でも解決するでしょうか。
また、あくまでもクラスの練習なので、出来るなら構造体でいいじゃないか、と思われる方はご了承してください。
コード:
#include"DxLib.h"
#include"Const.h"
#include"key.h"
#include"player.h"
// プレイヤーショットクラス
struct PlayerShot_t
{
int img; // 画像
int flag; // フラグ
double x,y; // 座標
double sp; // 移動速度
};
CPlayer player; // プレイヤー
PlayerShot_t playerShot[PLAYER_SHOT_MAX]; // プレイヤーショット
//----------------------------------------------
// プレイヤーショット読み込み
//----------------------------------------------
void PlayerShotLoad()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// プレイヤーショット画像
playerShot[i].img = LoadGraph("画像/p_bullet.png");
}
}
//----------------------------------------------
// プレイヤーショット初期化
//----------------------------------------------
void PlayerShotInitialize()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].x = 0.0; // 座標x
playerShot[i].y = 0.0; // 座標y
playerShot[i].flag = 0; // フラグ
playerShot[i].sp = 7.0; // 移動速度
}
}
//----------------------------------------------
// プレイヤーショット描画
//----------------------------------------------
void PlayerShotDraw()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// フラグが立っていたら
if(playerShot[i].flag == 1)
{
// プレイヤーショット(座標は画像の中心)
DrawRotaGraphF(playerShot[i].x, playerShot[i].y, 1.0f, 0.0f, playerShot[i].img, true);
}
}
}
//----------------------------------------------
// プレイヤーショット移動
//----------------------------------------------
void PlayerShotMove()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// フラグが立っていたら
if(playerShot[i].flag == 1)
{
// 上へ
playerShot[i].y -= playerShot[i].sp;
// 画面外
if(playerShot[i].y < (0 - PLAYER_SHOT_SIZE / 2))
playerShot[i].flag = 0;// フラグ初期化
}
}
}
//----------------------------------------------
// プレイヤーショットデータ登録
//----------------------------------------------
void PlayerShotEnter()
{
// Zキーが押された
if(CKey::KeyState(KEY_INPUT_Z) == 1)
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// フラグが立っていなかったら
if(playerShot[i].flag == 0)
{
playerShot[i].flag = 1; // フラグを立てる
playerShot[i].x = player.x; // プレイヤーの座標xに合わせる
playerShot[i].y = player.y; // プレイヤーの座標yに合わせる
break;
}
}
}
}
// プロトタイプ宣言=========================================================
void WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
//===========================================================================
// メイン
//===========================================================================
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
//===========================================================================
// 三大初期化
//===========================================================================
//WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
ChangeWindowMode(true); // ウィンドウモード
DxLib_Init(); // DXライブラリ初期化
SetDrawScreen(DX_SCREEN_BACK); // 裏画面設定
//===========================================================================
PlayerShotLoad(); // プレイヤーショット読み込み
PlayerShotInitialize(); // プレイヤーショット初期化
player.Load(); // プレイヤー読み込み
player.Initialize(); // プレイヤー初期化
//===========================================================================
// メインループ
//===========================================================================
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
CKey::UpdateKey(); // キー処理
if(CKey::KeyState(KEY_INPUT_ESCAPE) == 1) break; // エスケープで終了
PlayerShotEnter(); // プレイヤーショットデータ登録
PlayerShotMove(); // プレイヤーショット移動
PlayerShotDraw(); // プレイヤーショット描画
player.Move(); // プレイヤー移動
player.Draw(); // プレイヤー描画
// デバッグ用
DrawFormatString(0,0,GetColor(255,255,255),"player.x = %f",player.x);
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
Re: C++のクラスについて
Posted: 2012年9月29日(土) 06:03
by へにっくす
クールアイス さんが書きました:以下の通りに作っているのですが、弾の速度が弾の最大数が増えるにつれどんどん早くなってしまうのです。
おそらくクラスの管理がおかしいのだと思いますが、どうにもわかりません。
そりゃそうでしょ
自分のクラスで
コード:
//----------------------------------------------
// プレイヤーショット移動
//----------------------------------------------
void CPlayerShot::Move()
{
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
// フラグが立っていたら
if(playerShot[i].flag == 1)
{
// 上へ
playerShot[i].y -= playerShot[i].sp;
// 画面外
if(playerShot[i].y < (0 - PLAYER_SHOT_SIZE / 2))
playerShot[i].flag = 0;// フラグ初期化
}
}
}
こうやっときながら
コード:
//===========================================================================
// メインループ
//===========================================================================
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
CKey::UpdateKey(); // キー処理
if(CKey::KeyState(KEY_INPUT_ESCAPE) == 1) break; // エスケープで終了
player.Move(); // プレイヤー移動
player.Draw(); // プレイヤー描画
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].Enter(); // プレイヤーショットデータ登録
playerShot[i].Move(); // プレイヤーショット移動
playerShot[i].Draw(); // プレイヤーショット描画
}
// デバッグ用
DrawFormatString(0,0,GetColor(255,255,255),"player.x = %f",player.x);
}
ここでまたplayerShotの配列ぶんやってるんだから。。
そもそもクラスの中でグローバル変数使っているのが間違いです。
上記のMoveメソッドはこうなるはず。
他、Load、Initialize、Draw、Enterも同様です。
コード:
//----------------------------------------------
// プレイヤーショット移動
//----------------------------------------------
void CPlayerShot::Move()
{
// フラグが立っていたら
if(flag == 1)
{
// 上へ
y -= sp;
// 画面外
if(y < (0 - PLAYER_SHOT_SIZE / 2))
flag = 0;// フラグ初期化
}
}
Re: C++のクラスについて
Posted: 2012年9月29日(土) 12:30
by softya(ソフト屋)
クラスとメンバ変数は一体のものと言う理解が出来ていないと思われます。
へにっくすさんの指摘された通り、グローバル変数を使っている所とか、クラスのインスタンスとか理解不足の所が多数見受けられますね。
クラスのインスタンスはWinMainで定義してみては? そうすれば不用意な処理はコンパイルエラーしますので問題が明確になります。
あと気になるところ。
・PLAYER_SHOT_MAXは#defineされてませんか? C++では避けたほうが良いと思います。
・CPlayerShotのメンバ変数をpublicにしないでください。privateにしましょう。
Re: C++のクラスについて
Posted: 2012年9月29日(土) 14:12
by クールアイス
>>へにっくすさん
ご指摘ありがとうございます。自分で書いときながら、確かにこれは変だなと思っていましたが、やはり間違いでしたか・・・。
ご指摘のあった所は修正しました。
>> softya(ソフト屋) さん
ご指摘ありがとうございます。そうですね、まだまだクラスの理解が足りないようで、参考書などを解きながらもっと勉強していこうと思います。
クラスのインスタンスというのは、私のこのプログラムの場合
コード:
CPlayer player; // プレイヤー
CPlayerShot playerShot[PLAYER_SHOT_MAX]; // プレイヤーショット
これのことという認識で合っているでしょうか?
>>・PLAYER_SHOT_MAXは#defineされてませんか? C++では避けたほうが良いと思います。
const int で定義しています。
>>・CPlayerShotのメンバ変数をpublicにしないでください。privateにしましょう。
修正いたしました。
以下のように修正しましたが、
error C2065: 'player' : 定義されていない識別子です。
error C2228: '.x' の左側はクラス、構造体、共用体でなければなりません
error C2065: 'player' : 定義されていない識別子です。
'.y' の左側はクラス、構造体、共用体でなければなりません
とエラーが出ました。
ということはCplayerの宣言位置がおかしいか、CPLayerShotの関数がおかしいのか、どちらかなのでしょうか。
コード:
#include"DxLib.h"
#include"Const.h"
#include"key.h"
#include"player.h"
// プレイヤーショットクラス
class CPlayerShot
{
private:
int img; // 画像
int flag; // フラグ
double x,y; // 座標
double sp; // 移動速度
public:
void Load(); // 読み込み
void Initialize(); // 初期化
void Move(); // 移動
void Draw(); // 描画
void Enter(); // データ登録
};
//----------------------------------------------
// プレイヤーショット読み込み
//----------------------------------------------
void CPlayerShot::Load()
{
// プレイヤーショット画像
img = LoadGraph("画像/p_bullet.png");
}
//----------------------------------------------
// プレイヤーショット初期化
//----------------------------------------------
void CPlayerShot::Initialize()
{
x = 0.0; // 座標x
y = 0.0; // 座標y
flag = 0; // フラグ
sp = 7.0; // 移動速度
}
//----------------------------------------------
// プレイヤーショット描画
//----------------------------------------------
void CPlayerShot::Draw()
{
// フラグが立っていたら
if(flag == 1)
{
// プレイヤーショット(座標は画像の中心)
DrawRotaGraphF(x, y, 1.0f, 0.0f, img, true);
}
}
//----------------------------------------------
// プレイヤーショット移動
//----------------------------------------------
void CPlayerShot::Move()
{
// フラグが立っていたら
if(flag == 1)
{
// 上へ
y -= sp;
// 画面外
if(y < (0 - PLAYER_SHOT_SIZE / 2))
flag = 0;// フラグ初期化
}
}
//----------------------------------------------
// プレイヤーショットデータ登録
//----------------------------------------------
void CPlayerShot::Enter()
{
// Zキーが押された
if(CKey::KeyState(KEY_INPUT_Z) == 1)
{
// フラグが立っていなかったら
if(flag == 0)
{
flag = 1; // フラグを立てる
x = player.x; // プレイヤーの座標xに合わせる
y = player.y; // プレイヤーの座標yに合わせる
}
}
}
// プロトタイプ宣言=========================================================
void WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
//===========================================================================
// メイン
//===========================================================================
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
//===========================================================================
// 三大初期化
//===========================================================================
//WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
ChangeWindowMode(true); // ウィンドウモード
DxLib_Init(); // DXライブラリ初期化
SetDrawScreen(DX_SCREEN_BACK); // 裏画面設定
//===========================================================================
CPlayer player; // プレイヤー
CPlayerShot playerShot[PLAYER_SHOT_MAX]; // プレイヤーショット
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].Load(); // プレイヤーショット読み込み
playerShot[i].Initialize(); // プレイヤーショット初期化
}
player.Load(); // プレイヤー読み込み
player.Initialize();// プレイヤー初期化
//===========================================================================
// メインループ
//===========================================================================
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
CKey::UpdateKey(); // キー処理
if(CKey::KeyState(KEY_INPUT_ESCAPE) == 1) break; // エスケープで終了
player.Move(); // プレイヤー移動
player.Draw(); // プレイヤー描画
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].Enter(); // プレイヤーショットデータ登録
playerShot[i].Move(); // プレイヤーショット移動
playerShot[i].Draw(); // プレイヤーショット描画
}
// デバッグ用
DrawFormatString(0,0,GetColor(255,255,255),"player.x = %f",player.x);
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
Re: C++のクラスについて
Posted: 2012年9月29日(土) 15:24
by softya(ソフト屋)
CPlayerShot::Enter()で参照しているPlayerの情報はPlayerクラスのインスタンスがグローバルである前提で作られています。
Playerクラスのメンバ変数xが直接参照可能であるのも問題ですね。Playerクラスと言う存在に依存している事になります。
Playerクラスのx,yをまずprivateにしてPlayerクラスに座標を取得するメンバ関数を追加して、CPlayerShot::Enter()の引数に座標だけ渡せば良いと思いますが如何でしょうか?
CPlayerShot::Enter(int x,int y);って事ですね。
Re: C++のクラスについて
Posted: 2012年9月29日(土) 15:56
by クールアイス
>> softya(ソフト屋) さん
CPlayerの事をすっかり忘れていました・・・。こちらもprivateにし、外部からは見えないように修正しました。
問題のCPlayerShot::Enter()については、CPlayerクラスに「GetPosX()」「GetPosY()」というメンバ関数を追加し、double型のプレイヤー座標を返すことでどうにか成功しました。以下が修正された後のコードです。
player.h
コード:
#pragma once
// プレイヤークラス
class CPlayer
{
private:
double x,y; // 座標
double sp; // 移動速度
int img; // 画像
public:
void Load(); // 読み込み
void Initialize(); // 初期化
void Move(); // 移動
void Draw(); // 描画
double GetPosX(); // 座標取得x
double GetPosY(); // 座標取得x
};
player.cpp
コード:
#include"DxLib.h"
#include"Const.h"
#include"key.h"
#include"player.h"
//----------------------------------------------
// プレイヤー読み込み
//----------------------------------------------
void CPlayer::Load()
{
// プレイヤー画像
img = LoadGraph("画像/player.png");
}
//----------------------------------------------
// プレイヤー初期化
//----------------------------------------------
void CPlayer::Initialize()
{
x = 300.0; // 座標x
y = 400.0; // 座標y
sp = 5.0; // 移動速度
}
//----------------------------------------------
// プレイヤー移動
//----------------------------------------------
void CPlayer::Move()
{
// 移動範囲内なら
if(x >= (0 + PLAYER_SIZE / 2) && x <= (WINDOW_WIDTH - PLAYER_SIZE / 2))
{
// 左キー
if(CKey::KeyState(KEY_INPUT_LEFT) != 0)
x -= sp;// 左へ
// 右キー
if(CKey::KeyState(KEY_INPUT_RIGHT) != 0)
x += sp;// 右へ
}
// 画面端補正
if(x <= (0 + PLAYER_SIZE / 2)) x = (0 + PLAYER_SIZE / 2); // 左端
if(x >= (WINDOW_WIDTH - PLAYER_SIZE / 2)) x = (WINDOW_WIDTH - PLAYER_SIZE / 2); // 右端
}
//----------------------------------------------
// プレイヤー描画
//----------------------------------------------
void CPlayer::Draw()
{
// プレイヤー(座標は画像の中心)
DrawRotaGraphF(x, y, 1.0f, 0.0f, img, true);
}
//----------------------------------------------
// プレイヤー座標x取得
//----------------------------------------------
double CPlayer::GetPosX()
{
return x;
}
//----------------------------------------------
// プレイヤー座標y取得
//----------------------------------------------
double CPlayer::GetPosY()
{
return y;
}
main.cpp
コード:
#include"DxLib.h"
#include"Const.h"
#include"key.h"
#include"player.h"
// プレイヤーショットクラス
class CPlayerShot
{
private:
int img; // 画像
int flag; // フラグ
double x,y; // 座標
double sp; // 移動速度
public:
void Load(); // 読み込み
void Initialize(); // 初期化
void Move(); // 移動
void Draw(); // 描画
void Enter(double x, double y); // データ登録
};
//----------------------------------------------
// プレイヤーショット読み込み
//----------------------------------------------
void CPlayerShot::Load()
{
// プレイヤーショット画像
img = LoadGraph("画像/p_bullet.png");
}
//----------------------------------------------
// プレイヤーショット初期化
//----------------------------------------------
void CPlayerShot::Initialize()
{
x = 0.0; // 座標x
y = 0.0; // 座標y
flag = 0; // フラグ
sp = 7.0; // 移動速度
}
//----------------------------------------------
// プレイヤーショット描画
//----------------------------------------------
void CPlayerShot::Draw()
{
// フラグが立っていたら
if(flag == 1)
{
// プレイヤーショット(座標は画像の中心)
DrawRotaGraphF(x, y, 1.0f, 0.0f, img, true);
}
}
//----------------------------------------------
// プレイヤーショット移動
//----------------------------------------------
void CPlayerShot::Move()
{
// フラグが立っていたら
if(flag == 1)
{
// 上へ
y -= sp;
// 画面外
if(y < (0 - PLAYER_SHOT_SIZE / 2))
flag = 0;// フラグ初期化
}
}
//----------------------------------------------
// プレイヤーショットデータ登録
//----------------------------------------------
void CPlayerShot::Enter(double px, double py)
{
// Zキーが押された
if(CKey::KeyState(KEY_INPUT_Z) == 1)
{
// フラグが立っていなかったら
if(flag == 0)
{
flag = 1; // フラグを立てる
x = px; // プレイヤーの座標xに合わせる
y = py; // プレイヤーの座標yに合わせる
}
}
}
// プロトタイプ宣言=========================================================
void WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
//===========================================================================
// メイン
//===========================================================================
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
//===========================================================================
// 三大初期化
//===========================================================================
//WindowModeCheck(); // ウィンドウモードorフルスクリーンチェック
ChangeWindowMode(true); // ウィンドウモード
DxLib_Init(); // DXライブラリ初期化
SetDrawScreen(DX_SCREEN_BACK); // 裏画面設定
//===========================================================================
CPlayer player; // プレイヤー
CPlayerShot playerShot[PLAYER_SHOT_MAX]; // プレイヤーショット
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].Load(); // プレイヤーショット読み込み
playerShot[i].Initialize(); // プレイヤーショット初期化
}
player.Load(); // プレイヤー読み込み
player.Initialize();// プレイヤー初期化
//===========================================================================
// メインループ
//===========================================================================
while(ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
CKey::UpdateKey(); // キー処理
if(CKey::KeyState(KEY_INPUT_ESCAPE) == 1) break; // エスケープで終了
player.Move(); // プレイヤー移動
player.Draw(); // プレイヤー描画
for(int i = 0; i < PLAYER_SHOT_MAX; ++i)
{
playerShot[i].Enter(player.GetPosX(),player.GetPosY()); // プレイヤーショットデータ登録
playerShot[i].Move(); // プレイヤーショット移動
playerShot[i].Draw(); // プレイヤーショット描画
}
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
弾が全部1度に発射されるというバグを発見しましたが、これから頑張って修正していこうと思います。
ご指摘くださった皆様、本当にありがとうございました。
Re: C++のクラスについて
Posted: 2012年9月29日(土) 15:58
by クールアイス
解決にするのを忘れていました・・・。何度も申し訳ありません。