トップページ > 記事閲覧
staticについて
名前:あんこうるわっと 日時: 2018/02/24 07:29

敵クラスからインスタンスを複数作って敵を複数作る予定なんですが、複数作ることもあってstaticメンバ変数を座標とか入れるのに使えません。 今まで自分は座標とか値を保持しておきたい場合は、ほとんどstaticでやっていたので、どのようにしてstaticなしで値を保持すればいいのわかりません? 普通はどうするんですか?
メンテ

Page: 1 |

Re: staticについて ( No.1 )
名前:MOR 日時:2018/05/02 05:59

球に当たらずに何秒生き残れるかゲーム(超適当)を作ってみました(自キャラは赤い■)。複数インスタンスの一例はこんな感じですかね? #include "DxLib.h" #include <math.h> #define SIZE_X 640 #define SIZE_Y 480 #define NUM_TEKI 128 class TEKI { int x, y, c, r; public: void Init(int my_x, int my_y) { c = DxLib::GetColor(DxLib::GetRand(255), DxLib::GetRand(255), DxLib::GetRand(255)); r = 24 + DxLib::GetRand(16); do { x = DxLib::GetRand(SIZE_X - 1); y = DxLib::GetRand(SIZE_Y - 1); } while (Hantel(my_x, my_y, r*2) == FALSE); }; void Move() { int r = DxLib::GetRand(3), x1 = 0, y1 = 0; int n = 2; switch (r) { case 0: x1 = -n; break; case 1: x1 = n; break; case 2: y1 = -n; break; case 3: y1 = n; break; } if (x + x1<0 || x + x1>SIZE_X) x1 = 0; if (y + y1<0 || y + y1>SIZE_Y) y1 = 0; x += x1; y += y1; } void Draw() { DxLib::DrawCircle(x, y, r, c, TRUE); } BOOL Hantel(int my_x, int my_y, int r = -1) { return sqrt(((my_x + 8) - x)*((my_x + 8) - x) + ((my_y + 8) - y)*((my_y + 8) - y)) > ((r == -1) ? this->r : r); }; }; TEKI teki[NUM_TEKI]; int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { int i, x=SIZE_X/2, y=SIZE_Y/2, x1=0, y1=0; LONGLONG llTime; BOOL bLOOP = TRUE; DxLib::ChangeWindowMode(TRUE); DxLib::SetGraphMode(SIZE_X, SIZE_Y, 32); if (DxLib::DxLib_Init() == -1) return -1; DxLib::SetDrawScreen(DX_SCREEN_BACK); DxLib::SRand(DxLib::GetNowCount()); for (int i = 0; i < NUM_TEKI; i++) teki[i].Init(x, y); llTime = DxLib::GetNowHiPerformanceCount(); while (DxLib::ProcessMessage() == 0 && bLOOP==TRUE) { DxLib::DrawBox(0, 0, SIZE_X, SIZE_Y, DxLib::GetColor(0, 128, 128), TRUE); for (i = 0; i<NUM_TEKI; i++) { teki[i].Move(); teki[i].Draw(); } x1 = y1 = 0; char KeyBuf[256]; DxLib::GetHitKeyStateAll(KeyBuf); if (KeyBuf[KEY_INPUT_UP] == 1) y1 = -4; if (KeyBuf[KEY_INPUT_DOWN] == 1) y1 = 4; if (KeyBuf[KEY_INPUT_LEFT] == 1) x1 = -4; if (KeyBuf[KEY_INPUT_RIGHT] == 1) x1 = 4; if (x + x1<0 || x + x1>SIZE_X-16) x1 = 0; if (y + y1<0 || y + y1>SIZE_Y-16) y1 = 0; x += x1; y += y1; DxLib::DrawBox(x, y, x+16, y+16, DxLib::GetColor(255, 0, 0), TRUE); for (i = 0; i<NUM_TEKI; i++) { if (teki[i].Hantel(x, y) == FALSE) { DxLib::ScreenFlip(); char buf[256]; DxLib::sprintfDx(buf, "TIME = %f 秒", (double)(DxLib::GetNowHiPerformanceCount() - llTime) / 1000000.0); ::MessageBox(NULL, buf, "Test", MB_OK); bLOOP = FALSE; break; } } DxLib::ScreenFlip(); } return DxLib::DxLib_End(); }
メンテ
Re: staticについて ( No.2 )
名前:あんこうるわっと「解決」 日時:2018/02/27 09:19

参考になりました。ありがとうございます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存