2012-02-25 12 views
1

カイロを使用。mono c#CairoHelper.Translate

大きな矩形の内側に矩形を描いていますが、魔法使いは描画領域の内側にあります。

cr.Translate(width/2, height/2); 

cr.Rectangle((pX + (i * tmp)) , pY, boxsize, boxsize);  

private void recordPosition(double x, double y) 
{ 
    x = x*2; 
    y = y*2; 
    boxCoordinates.Add(new double[,] 
     { 
      {x, y} 
     } 
    ); // store coords 
} 


List<double,double> boxCoordinates 

をそうするために:私は描画領域の魔女にイベントをアタッチするために管理している

が、私はそれから

this.AddEvents ((int) EventMask.ButtonPressMask); 

this.ButtonPressEvent += delegate(object o, ButtonPressEventArgs args) { 
    hasInterface(args.Event.X, args.Event.Y); 

    Console.WriteLine("Button Pressed " + args.Event.X + ", " + args.Event.Y); 
}; 

を拡張したオブジェクトである私は、動的に使用して四角形を描画しています描画領域の内側では、x = 90、y = 45の「外側」の視点からx = 0、y = 0に四角形が描画されます。幅= 180、高さ= 100 私はtranslateを使用していました(これの半分がコピーされているのでサイズ/ 2)ので、この問題を解決するために描画領域が四角形のサイズ変更を行っていたことを意味します。これを2倍しますが、これは機能しません。私は描画された四角形の外側に「ヒット」しています。

これを行うにはどのような方法が最適ですか?私はX Yの位置をウィンドウから描画領域に変換することを意味しますが、これは他の言語では可能でしたが、C#やモノからの描画領域の作成方法はわかりません。

ありがとうございました。

答えて

1

私はこれをC w SDLとC#でCairoで数回行っていますが、基本的には、それぞれの四角形の境界ボックスをレンダリングに使用している座標に変換することができます。カイロのキャンバス。

それぞれの四角形について、自分の四角形の位置を自分の世界に持つことになります。私はこれらを "ワールド座標"と "スクリーン座標"(あなたのマウスがどこになるか)と呼んでいます。

各ボックスのワールド座標を保存し、レンダリングする各フレームのスクリーン座標に変換することができます。

public class Shape { 
    public Point WorldLoc { get; set; } 
} 

WorldLocの値には、すべての物理(ある場合)があります。レンダリングに来ると、WorldLocScreenLocに変換したいと考えています。

public class Scene { 
    public double Zoom; 
    public Point Offset; 

    public Point WorldToScreen(Point world){ 
    var p = new Point(); 
    p.x = (world.x - Offset.x) * Zoom; 
    p.y = (world.y - Offset.y) * Zoom; 
    return p; 
    } 
} 

このシーンで何かをレンダリングするたびに、WorldToScreen()を使用して画面座標を取得します。マウスがワールドボックスのスクリーンボックスに入っていれば、同じことを実行することができます。

+0

ロジックは私がやっているのと似ていますが、Offset変数はどこから来ているのですか?私はそれをどのように初期化するのですか? また、リストのを使用してシェイプの位置を保持していますが、それを行うような感覚を増しますが、テストではListを使用し続けることを考えています。 –

+0

オフセットは、あなたの世界のビューポートの左上隅の位置になります。多くのリストオブジェクトを保持することは無駄に見えます。 – IanNorton

+0

私が言ったのはListのようなものです Shapeにはxとyとそのオブジェクトに関する他の詳細があります。ご協力いただきありがとうございます。 –