質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.49%
Visual C++

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

Q&A

解決済

1回答

943閲覧

自弾をaddしようとしたらエラーを吐いてしまう

FARCTORY1

総合スコア4

Visual C++

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

0グッド

0クリップ

投稿2019/08/23 15:27

編集2019/08/23 21:47

目的

的当てゲーム制作。自キャラに画像を持った弾を打たせたい

問題点

Playerクラスでmoveしているときに自弾を発射しようとしたらaddの部分で下記のエラーを吐いてしまう。
newしたときにコンストラクタで画像を放り込んでもエラーを吐いてしまうのでどうしたらいいのかわかりません。

例外がスローされました:読み取りアクセス違反。this->m_pStage が nullptr でした。

Playerクラスコンストラクタ

C++

1CPlayer::CPlayer(ID2D1RenderTarget *pRenderTarget) 2{ 3 m_pBitmapP = NULL; 4 CTextureLoader::CreateD2D1BitmapFromFile(pRenderTarget, _T("res\smilie.tga"), &m_pBitmapP); 5 m_bTama = true; 6 //m_pRed = NULL; 7 m_fX = 0.f; 8 m_fY = 0.f; 9}

Playerクラスmove()内

C++

1 if (GetAsyncKeyState(VK_SPACE)) { 2 if (!m_bTama) { 3 IGameObject *pObj = new CTama(m_pStage, m_fX, m_fY); 4 m_pStage->AddTama(pObj);  //エラー部分。 5 } 6 m_bTama = true; 7 } 8 else 9 m_bTama = false;

以下tamaクラス

C++

1#include "stdafx.h" 2#include <d2d1.h> 3#include "tama.h" 4#include "TextureLoader.h" 5 6ID2D1Bitmap *CTama::m_pBitmap=NULL; 7ID2D1RenderTarget *CTama::pRenderTarget = NULL; 8CTama::CTama(CStage *pStage, float x, float y) 9{ 10 m_pParent = pStage; 11 m_fX = x; 12 m_fY = y; 13 m_fVX = 0; 14 m_fVY = -2.0f; 15} 16 17CTama::~CTama() 18{ 19 SAFE_RELEASE(m_pBitmap); 20} 21 22 23bool CTama::move() { 24 m_fY += m_fVY; 25 if (m_fY < -10) 26 return false; 27 return true; 28} 29 30void CTama::draw(ID2D1RenderTarget *pRenderTarget) { 31 D2D1_RECT_F rc; 32 D2D1_SIZE_F size; 33 size = m_pBitmap->GetSize(); 34 rc.left = m_fX; 35 rc.top = m_fY + m_fVY; 36 rc.right = rc.left + size.width; 37 rc.bottom = rc.top + size.height; 38 pRenderTarget->DrawBitmap(m_pBitmap, rc, 1.0f, D2D1_BITMAP_INTERPOLATION_MODE::D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR); 39} 40 41bool CTama::collide(float x, float y, float w, float h) { 42 return false; 43} 44bool CTama::collide(IGameObject *pObj) { 45 return false; 46} 47 48void CTama::Restore(ID2D1RenderTarget *pRT){ 49 SAFE_RELEASE(m_pBitmap); 50 CTextureLoader::CreateD2D1BitmapFromFile(pRT, _T("res\tama.png"), &m_pBitmap); 51 //m_pParent = pStage; 52} 53void CTama::Finalize() { 54 SAFE_RELEASE(m_pBitmap); 55}

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

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

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

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

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

guest

回答1

0

ベストアンサー

m_pStageの定義がないようですが、そこらへんはどうなってるんでしょうか

投稿2019/08/23 22:45

y_waiwai

総合スコア87747

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

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

FARCTORY1

2019/08/23 23:00

あっ……。 m_pStage探してみたら見当たらなかったので色々弄ってみていたら CPlayer::CPlayer(CStage *pStage){~~} と書き換えたら、解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問