バグ の日記

[C#]FPS

パーマリンク by バグ on 2013年8月22日(木) 09:57

新・ゲームプログラミングの館のFPSの章を見ていて、なんとなくC#用に移植してみました。
特に変わった事はしていないけれど、DXライブラリ関数を使わなくてもよいようにしてあります。

コード[C#]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
using System;
using System.Diagnostics;
using System.Threading;
 
class FPS
{
    #region フィールド
    /// <summary>
    /// 経過時間計測用
    /// </summary>
    private Stopwatch m_stopwatch = new Stopwatch();
 
    /// <summary>
    /// フレームカウンタ
    /// </summary>
    private int m_count = 0;
 
    /// <summary>
    /// リフレッシュレート
    /// </summary>
    private int m_refresh = 60;
    #endregion
 
    #region プロパティ
    /// <summary>
    /// リフレッシュレート(Hz)の設定&取得
    /// </summary>
    public int RefreshRate
    {
        get
        {
            return m_refresh;
        }
        set
        {
            // ゼロ除算防止処置
            if (value > 0)
            {
                m_refresh = value;
            }
        }
    }
 
    /// <summary>
    /// FPS値の取得
    /// </summary>
    public double Value
    {
        get;
        private set;
    }
    #endregion
 
    #region メソッド
    /// <summary>
    /// 更新処理
    /// </summary>
    public void Update()
    {
        // 初回呼び出し?
        if (m_count == 0)
        {
            // 時間計測開始
            m_stopwatch.Reset();
            m_stopwatch.Start();
        }
        // 更新タイミング?
        else if (m_count == m_refresh)
        {
            // 平均値の算出
            Value = 1000.0 / ((double)m_stopwatch.ElapsedMilliseconds / m_refresh);
 
            // 時間計測開始
            m_stopwatch.Reset();
            m_stopwatch.Start();
 
            // フレームカウンタの初期化
            m_count = 0;
        }
 
        ++m_count;
    }
 
    /// <summary>
    /// 待機処理
    /// </summary>
    public void Wait()
    {
        // 目標時間を算出
        int target = (int)(1000.0 / m_refresh * m_count);
 
        // 待機時間 = 目標時間 - 実際の経過時間
        int wait = target - (int)m_stopwatch.ElapsedMilliseconds;
 
        // 待機時間が正値の場合は待機させる
        if (wait > 0)
        {
            Thread.Sleep(wait);
        }
    }
    #endregion
}

なんというか・・・

パーマリンク by バグ on 2013年8月06日(火) 08:57

夏だねぇ・・・

テトリス?

パーマリンク by バグ on 2013年8月01日(木) 09:36

タイトルを見るとテトリスについての質問なのだが、掲示ソースはコラムスという不思議。
それはさておき、あの御仁は何を作りたいのだろう?
大量の質問トピが立てられているが、それらの内容に一貫性がないんだよな。

テトリス作りたいなら、テトリスの作り方というサイトがたくさんあるだろうに・・・。というか、あそこまで丁寧にコメントで説明してくれているソースを見ても、どこで何をしているか(アルゴリズム的な話ではなく関数の役割)すら分からないのでは、0から教えるしかない訳で・・・そしてそれはとてつもなく面倒な訳で・・・。

落ち物パズルの質問だから答えたかったけど、今回はあまり深くは関わらないようにしておこう・・・。

仕様ってなんだろう?

パーマリンク by バグ on 2013年5月21日(火) 09:53

打ち合わせして、仕様決めて、仕様書もらって、作ったわけですよ。
作ってる最中にも不明な箇所は確認しながら作ったわけですよ。

上記のどれにも参加してない上司がそのソフトを見たときの反応。



上司「お客さんはこういうのを望んでいないんじゃないか?普通は○○○じゃないか?」

私「それに関しては、打ち合わせ時に何度もこちらから提案しましたが、お客様から不要だと言われましたし、お客さんに出してもらった仕様書通りに作ったつもりなんですが・・・」

上司「そんなのは建前だよ。打ち合わせの言葉の裏を予測して作らないと、後だしで色々させられるぞ?」

私「うーん・・・そうなんですかねぇ・・・?(それはそれで、追加料金貰えばウマーじゃないのかな・・・?)」



個人的には言った言わないで揉めない為に、簡単なものでもいいから・・・と言ってお客さん自身に仕様書を書いてもらったので間違いないと思うんですけどね・・・。あまりこちらが勝手に動いた挙句に、無駄になったり、仮に喜ばれたとしてもタダ働きするのもシャクなんですけどね。

なんだかなぁ・・・

パーマリンク by バグ on 2013年5月07日(火) 08:57

質問して、それに答えてくれてる人の意見は反発&ガン無視しておきながら、ソースを載せてくれた人には「キレイなソースを見られて満足です」とか何様だとwww

あの御方にとってのプログラミング言語ってのは、何かを成す為の道具ではなく、それ自体が学問の対象であるようですな。
それなら考え方の違いにも納得がいくけど、それにしてもあんな頭でっかちでは伸びるものも伸びないような気がしますな・・・意欲はありそうなのに勿体無い・・・。

経験者の言っていることには、その人の経験に基づいての何らかの理由がある場合が少なくない訳で、それを素直に吸収しようという姿勢がないならggrksとしか言えないよなぁ・・・。いきなり経験者目線での意見をぶつけられて理解できずに困惑している可能性も否定できないけど、回答者の方々もかなり優しく分かり易く書かれているし、それはないと思うんだよな。