🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

5182閲覧

アクションゲーム 複数の敵の作り方

nia_1001

総合スコア13

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2019/09/17 01:57

C++とOpenGL1.0でアクションゲームを作っています

歩く敵を10体くらい出したいです。
プログラムがわかりません教えていただけませんか?

C++.h

1#pragma once 2 3#include "Rect.h" 4 5using namespace glm; 6 7 8#define ENEMY_MAX 10 9#define WALK_ENEMY_SIZE 20 10 11class WalkEnemy:Rect 12{ 13public: 14 15 vec2 m_speed;//スピードを保存 16 17 18 //コンストラクタ 19 WalkEnemy(); 20 ~WalkEnemy(); 21 22 int Init(const char*_fileName, vec2 _size=vec2(), vec2 _position = vec2()); 23 24 bool WalkEnemyIntersect(Rect const& _rect); 25 26 bool WalkEnemyIntersect(vec2 const & _point); 27 28 //テクスチャーの数の指定 今は一つ 29 unsigned int m_texture; 30 31 void Update(); 32 33 void Draw(); 34 35 36}; 37extern WalkEnemy g_WalkEnemy;

C++.CPP

1#include "WalkEnemy.h" 2#include "Header.h" 3 4WalkEnemy g_WalkEnemy; 5 6WalkEnemy::WalkEnemy(): 7 m_texture{}, 8 m_speed{} 9 //m_position{} 10 11{ 12 13} 14 15WalkEnemy::~WalkEnemy() 16{ 17} 18 19int WalkEnemy::Init(const char * _fileName, vec2 _size, vec2 _position) 20{ 21 //テクスチャーの生成 22 glGenTextures( 23 1,//GLsizei n,初期化する数 24 &m_texture);//GLuint *textures 25 26 //テクスチャーをバインドする 27 glBindTexture( 28 GL_TEXTURE_2D,//GLenum target, 29 m_texture//GLuint texture 30 ); 31 32 TexFromBMP(_fileName, 0x00, 0xff, 0x00); 33 34 m_size = _size; 35 m_position = _position; 36 37 38 39 40 //m_position = vec2(140,140); 41 42 43 44 return 0; 45} 46//エネミーの当たり判定 47bool WalkEnemy::WalkEnemyIntersect(Rect const & _rect) 48{ 49 return Rect::Intersect(_rect); 50 51 52 53} 54bool WalkEnemy::WalkEnemyIntersect(vec2 const & _point) 55{ 56 return Rect::Intersect(_point); 57 58 59 60} 61 62void WalkEnemy::Update() 63{ 64 /*if (m_position.x += 20) 65 { 66 67 }*/ 68 69} 70 71void WalkEnemy::Draw() 72{ 73 //テクスチャーをバインドする 74 glBindTexture( 75 GL_TEXTURE_2D,//GLenum target, 76 m_texture//GLuint texture 77 ); 78 Rect::Draw(); 79} 80

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず、基礎すらできてない。

なぜわざわざ vec m_speed 等をpublicにしている?
これではカプセル化できないし。

extern WalkEnemy g_WalkEnemy;

とグローバル変数にしていますが、これは危険です。

参考1, 参考2 を参照。


[追記1]

生成時は普通の構造体のように書く。(厳密には違うけど)

C++

1// コンストラクタが空タイプなら 2Test test1; 3 4// コンストラクタがint一個を伴うなら 5Test test2(100);

のように書く。(一つだけ生成)

あるいは new/deleteを用いて

C++

1// コンストラクタが空タイプなら 2Test* test1 = new Test(); 3 4// コンストラクタがint一個を伴うなら 5Test* test2 = new Test(100);

のように書く。(この場合は使い終わったらdeleteする必要がある.free関数みたいに)

それの配列なら、

C++

1// newを使うほう 2Test* tests1[10]; 3tests1[0] = new Test(); 4tests1[1] = new Test(); 5... // 要素番号 9 までやる

と書ける。std::vectorを使っていいなら、

C++

1// #include<vector> は書いておく 2 3std::vector<Test*> tests; 4tests.push_back( new Test() ); 5tests.push_back( new Test() ); 6... // 同じく

のようにも書ける。

いずれにしても、質問者さんは基礎すらできていないようなので、基礎から固めては?

投稿2019/09/17 02:40

編集2019/09/17 02:53
BeatStar

総合スコア4962

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まず、実行結果はどこまで出来ていますか?
それ以前に全てとは言いませんがどの程度プログラム(C++)を理解されていますか?
他の方にご自身のプログラムを説明できますか?(コメント文を抜きにして)
発言内容から配列すら理解されていないように見受けられます。

いきなりゲームを作るのではなく最低限基礎となるプログラムの理解をすべきではないでしょうか。
このまま土台となる技術を理解せずに作っても必ず次でつまづきます。

とりあえず直ぐに思いつく方法なら敵を10体分配列に格納してループ文で呼び出せば良いのではないのでしょうか。(綺麗なコードとは言えませんが。)
後、更新部分も実装されていないのでこのままでは動かないです。

投稿2019/09/17 02:31

tomy-c

総合スコア179

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問