これは私がやろうとしていることです。私はSWFとSDネームスペースだけを使ってゲームを作っています。私は1000/30インターバル(30フレーム)のタイマーを使って、 InvokeGraphics()を呼び出すと、楕円が描かれていることを除いて、すべてが多少レンダリングされます。ダブルバッファリングとthis.SetStyle()を使用しようとしましたが失敗しました。コード:VC#Form Flickers
public partial class MainForm : Form
{
int x = 0;
public MainForm()
{
InitializeComponent();
var sz = SystemInformation.PrimaryMonitorSize;
this.FormBorderStyle = FormBorderStyle.None;
this.Size = sz;
this.SetStyle(ControlStyles.OptimizedDoubleBuffer,true);
Timer tmr = new Timer();
tmr.Enabled = true;
tmr.Interval = 1000/30;
tmr.Tick += delegate(object sender, EventArgs e)
{
x++;
this.InvokePaint(this,new PaintEventArgs(this.CreateGraphics(),this.Bounds));
};
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if((int)e.KeyChar == 27) Application.Exit();
base.OnKeyPress(e);
}
protected override void OnPaint(PaintEventArgs e)
{
var g = e.Graphics;
g.Clear(Color.Firebrick);
// this ellipse flickrs
g.FillEllipse(Brushes.Green,x,64,64,64);
base.OnPaint(e);
}
protected override void OnMouseClick(MouseEventArgs e)
{
base.OnMouseClick(e);
}
}
注:これは私の宿題ではありません。 –