数字の画像でカウンターを描画

数字の画像を切り分けてカウンターを描画

  1. num.gif の画像は、0~9の数字が「60ピクセル*60ピクセル」で並んでいます。
    この画像を style タグで切り分けてカウンターを描画します。
    rect には num.gif を切り分ける座標を「上, 右, 下, 左」の順に指定します。
    (他の言語では「左上座標と右下座標」または「左上座標と幅と高さ」を指定することが多い)
    スタイルシートの基本は 自由に配置 を参照して下さい。
  2. 次の例は012を並べて描画するソースコードです。
    clip:rect() で描画する数字を切り出します。
    absolute の left: と top: が画像を描画する座標ですが、left: top: 共にゼロが設定されています。
    所が数字が重なることはありません。
    <img src="img/num.gif" style="clip:rect(0px,60px,60px,0px);position:absolute;left:0px;top:0px;">
    <img src="img/num.gif" style="clip:rect(0px,120px,60px,60px);position:absolute;left:0px;top:0px;">
    <img src="img/num.gif" style="clip:rect(0px,180px,60px,120px);position:absolute;left:0px;top:0px;">
    
    実は left: と top: の値は、num.gif 全体の左端座標を基準に指定します。
    実際に描画されるX座標は次のようになります。
    (一行に並んでいるのでY座標(top:)は常にゼロになる)
    数字画像内のX座標描画されるX座標描画される Y座標
    数字0 0 0 0
    数字1 60 60 0
    数字2 120 120 0
  3. 05を並べて描画してみます。
    5を left:0px で描画すれば、座標は 300 の位置に描画されます。
    0の隣(X=60)に並べるには 60-300=-240 で 240ピクセル左に寄せなければなりません。
    <img src="img/num.gif" style="clip:rect(0px,60px,60px,0px);position:absolute;left:0px;top:0px;">
    <img src="img/num.gif" style="clip:rect(0px,360px,60px,300px);position:absolute;left:-240px;top:0px;">
    
  4. View_Zero(num) 関数では、num で指定した0~9の数字が座標 0,0 に描画されます。
        // 数字 num を座標 0,0 に描画
        function View_Zero(num)
        {   var pos = num*60;
            var s1= 'style="clip:rect(0px,' + (pos+60) + 'px,60px,' + pos + 'px);';
            var s2 = 'position:absolute;left:' + (0-pos) + 'px;top:0px;';
            var s = '<img src="img/num.gif"' + s1 + s2 + '">';
            document.write(s);
        }
    
  5. body から View_Zero() 関数を呼び出します。
    複数の数字を描画すると重なるので注意して下さい。
    <script type="text/javascript">
        View_Zero(0);
        View_Zero(3);
        View_Zero(8);
    </script>
    
  6. View_Num(num, x, y) 関数では、num で指定した0~9の数字が座標 x,y に描画します。
        //「上, 右, 下, 左」の順
        function View_Num(num, x, y)
        {   var pos = num*60;
            var s1= 'style="clip:rect(0px,' + (pos+60) + 'px,60px,' + pos + 'px);';
            var s2 = 'position:absolute;left:' + (x-pos) + 'px;top:' + y + 'px;';
            var s = '<img src="img/num.gif"' + s1 + s2 + '">';
            //window.alert(s);
            document.write(s);
        }
    
  7. body から View_Num() 関数を呼び出します。
    321 が並んで描画されます。
    <script type="text/javascript">
        View_Num(3,100,100);
        View_Num(2,160,100);
        View_Num(1,220,100);
    </script>
    

カウンターを描画

  1. 数字の画像を並べてカウンターを描画します。
        // 6桁でカウンターを描画
        function View_Count(cnt)
        {   var i,w,c;
            w= cnt;
            for(i=0; i<6; i++)
            {  c= w%10;             //下位の桁から取り出す
               w= parseInt(w/10);
               View_Num(c, 360-i*60,100);
            }
        }
    
  2. カウンターを描画する View_Count() 関数です。
    cnt がカウンターで、下位の桁から6桁で描画します。
    View_Num(c, 360-i*60,100); で View_Num() を呼び出します。
    X座標は 60 を基準に 60 の幅で描画されます。
  3. body から View_Count() 関数を呼び出します。
    <script type="text/javascript">
        View_Count(14375);
    </script>
    
  4. 画像を切り分けてカウントを描画 をクリックすると0~9の画像を組み合わせてカウンターが6桁で描画されます。
    カウンターの値を変えて確かめて下さい。
    Count Class でヒットポイントなど汎用的な数字を表示するクラスを作成します。

前田稔の超初心者のプログラム入門
超初心者のプログラム入門(PHP)