2017-08-23 18 views
-2

私はプロジェクト用のゲームエンジンを作成しています。入力用のものとSDL用のものを使用しています。C++/SDLどのように配列を上書きするか?

私はこのようなものがあります:

class CInput 
{ 
public: 
    CInput(); 

    Rect MousePosition  = Rect(0, 0); 
    Rect MouseDeltaPosition = Rect(0, 0); 

    bool GetMouseButton(int button); 

    bool Process(); 

private: 
    bool _mouseButtons[5]; 
}; 

bool CInput::GetMouseButton(int button) 
{ 
    return _mouseButtons[button - 1]; 
} 

RECT構造体は次のようにされています

struct Rect 
{ 
    int x, y; 

    Rect(int x, int y) : x(x), y(y) {}; 
}; 

私は本当によく何のために使用されるマウスボタンや動きをログに記録していますが、それはそうですが私はマウスの位置を設定する/ mousedeltapositionそれは_mouseButtons配列に "オーバーフロー"ですか?誰もボタンを押していない場合であってもテスト中

while (SDL_PollEvent(&event)) 
{ 
    switch (event.type) 
    { 
    case SDL_MOUSEMOTION: 
     MousePosition  = Rect(event.motion.x, event.motion.y); 
     MouseDeltaPosition = Rect(event.motion.xrel, event.motion.yrel); 

     break; 

    case SDL_MOUSEBUTTONDOWN: 
     _mouseButtons[event.button.button - 1] = true; 
     break; 
    case SDL_MOUSEBUTTONUP: 
     _mouseButtons[event.button.button - 1] = false; 
     break; 

    case SDL_QUIT: 
     return 0; 
    } 
} 

、_mouseButtonアレイは255で満たされ得ることができます:

は、ここに私のインプットキャプチャです。

EDITは---

imgur

これは、単に行うからである。Input.GetMouseButton(0)マウスがある位置

にあるときに255を返し !私はこの問題を絞り込んだ.DeltaMousePosition.yが負の場合、マウスがウィンドウに対して上に動いているように見える!問題の可能性があります

+2

変数がconstであることをコンパイラに嘘をつきましたので、おそらく_があふれています。 – tkausl

+0

[mcve]で編集します。 – genpfault

+0

これは最小ですし、問題のために完了です... –

答えて

0
const Rect MousePosition  = Rect(0, 0); 
// ... 
*(Rect*)(&MousePosition)  = Rect(event.motion.x, event.motion.y); 

あなたは、MousePositionがconstだったとコンパイラに伝えました。参照でポインタではないので、コンパイラは確かにを知っているので、MousePosition.xMousePosition.yは絶対に変更できません。つまり、0です。今から永遠まで、彼らは0になります。

コンパイラはあなたのコードは、私はそれが期待する方法を最適化した場合、それだけで完全にMousePositionMouseDeltaPositionを削除し、すべてはあなたが書いている理由です、リテラル0MousePosition.xMousePosition.yMouseDeltaPosition.xMouseDeltaPosition.yから読み込み、置き換えられます代わりにあなたの配列。

TLDR:コンパイラに嘘をつけないでください。変数に書き込む場合は、constにしてconstをキャストしないでください。

編集:

これは単純にやってからです:マウスがその機能を見て、特定の位置でまあ

ときInput.GetMouseButtonは(0)255を返します。

bool CInput::GetMouseButton(int button) 
{ 
    return _mouseButtons[button - 1]; 
} 
0 - 1

ので_mouseButtons[-1]から読み出し-1がデータを読み取るどこか他から。未定義の動作。

+0

私は今constを削除しました。まだ問題が発生しています。更新後の –

+0

は、列挙型は1から始まり、そのマウスボタン –

+0

@ReeceWardとは0「は、マウスのボタンとは0が存在しない」まだ質問にあなたはテストケースとして0を使用しないことを言っていません。これらのうちの1つは間違っています。 [1; 5]の範囲内で値を使用すると、問題は提示されたコードに含まれません。 – keltar

関連する問題