投稿者 あにす  (社会人) 投稿日時 2008/11/18 00:43:10
60fpsで描画するゲームのメインループでDrawString()をして、
1フレームあたりのDrawString()の回数を増やしていってfpsの下がり具合を見てみました。
100  余裕の60fpsです。
500  まだ落ちません。60fps
1000 まだ60fpsを保ってます。
5000 26fps。一気に増やしすぎたようです。最低でも30fpsは欲しいと思いませんか?
4000 32fps。これくらいが滑らかに見える限界だと思います。

【環境】
OS WindowsXP Home Edition SP3
CPU AMD Sempron 3400+ 1.99GHz
RAM 1.96GB
処理系 VB2005EE

Imports System.Windows.Forms
Imports System.Drawing

Module Module1

    Sub Main()
        Dim pictureBox As New PictureBox()
        pictureBox.Dock = DockStyle.Fill
        Dim form As New Form()
        form.Controls.Add(pictureBox)
        form.Show()

        Dim bmp As New Bitmap(form.ClientSize.Width, form.ClientSize.Height)
        Dim g As Graphics = Graphics.FromImage(bmp)

        Dim timer As New System.Timers.Timer(1000)
        AddHandler timer.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf timer_Elapsed)
        timer.Start()

        Dim nextFlame As Double = Environment.TickCount
        Dim wait As Single = 1000 / 60
        While form.Created
            If Environment.TickCount >= nextFlame Then
                If Environment.TickCount < nextFlame + wait Then
                    g.FillRectangle(Brushes.Black, 0, 0, pictureBox.Width, pictureBox.Height)
                    For i As Integer = 1 To 4000
                        g.DrawString(fps.ToString(), form.Font, Brushes.White, i * form.Font.Size, i * form.Font.Size)
                    Next
                    pictureBox.Image = bmp
                    drawCount += 1
                End If
                nextFlame += wait
            End If
            Application.DoEvents()
        End While
    End Sub

    Dim fps As Integer = 0
    Dim drawCount As Integer = 0
    Sub timer_Elapsed(ByVal sender As ObjectByVal e As System.Timers.ElapsedEventArgs)
        fps = drawCount
        drawCount = 0
    End Sub

End Module


僕もゲーム作りに挑戦したくなってきました。