それが正常な動作であるかどうか、それを防ぐことができるものがあるかどうかを知りたいだけです。
WindowsフォームでOpenGLとTaoClassicを使用しています(問題には関係ないかもしれませんが)。現時点では、ウィンドウの周りを移動する非常に基本的な正方形があり、ウィンドウの端に到達すると、速度が反転します (左/右の場合は x、上/下の場合は y)。
これまでのところ、空想的なものは何もありません。
面白いのは、オブジェクトが移動するときです。フォームの境界をクリックすると、アプリケーションが停止し、新しい描画は行われませんが、アプリケーションは部分的に更新され続けます。以下のコードから、「衝突」検出が行われていない間、最初の2行が実行され続けるため、私は部分的に言います
transform.position.x += velocity.x * xSign * Time.deltaTime;
transform.position.y += velocity.y * ySign * Time.deltaTime;
if (penguin.transform.position.x + penguin.sprite.texture.width / 2f > Engine.Screen.Width ||
penguin.transform.position.x - penguin.sprite.texture.width / 2f < 0) xSign *= -1;
if (penguin.transform.position.y + penguin.sprite.texture.height / 2f > Engine.Screen.Height ||
penguin.transform.position.y - penguin.sprite.texture.height / 2f < 0) ySign *= -1;
天才的なトリックはありません。マウス ボタンを離すと、オブジェクトが本来あるべき位置にジャンプし、背面で更新が実行され続けます。しかし、十分に長く押し続けると、オブジェクトは境界から外れますが、跳ねません。放すと、正方形が窓の外に出て、境界線で震え始めます。
私はこれを得た:
protected override void OnClientSizeChanged(EventArgs e)
{
base.OnClientSizeChanged(e);
Engine.Screen.Width = this.ClientSize.Width;
Engine.Screen.Height = this.ClientSize.Height;
// This is just to set the window size and the position of origin
App.SetProjection2D(Engine.Screen.Width, Engine.Screen.Height, App.Projection);
Gl.glViewport(0, 0, Engine.Screen.Width, Engine.Screen.Height);
}
アプリケーションの PeekMessage は次のとおりです。
private void OnApplicationEnterIdle(object sender, EventArgs e)
{
Message msg;
while (!PeekMessage(out msg, IntPtr.Zero, 0, 0, 0))
{
_timer.SetTime();
Input.Update();
_callback();
}
}
問題はそれらのいずれかにあると思います。Update メソッドと Draw メソッドは、_callback(); から呼び出されます。方法
参考までに、フォームをクリックしてもアプリケーションは停止しないため、境界線のクリックに基づくイベントに関係しています。
何か案が?