ひろひろの生活日記(LIFE Of HIROHIRO)

パソコン講習とソフト開発をしています。自作小説も掲載しています。ネット情報発信基地(上野博隆)Hirotaka Ueno

ロボットの描画、コーディングの修正。(4)

2022年04月13日 10時07分20秒 | ゲーム開発(Game development)

接合点の角度を変えるだけで描画は変わります。

モジュールの修正。

・コメントをつけました。

//
//多角形の描画(座標指定)座標をそのまま描画(回転考慮あり)
//
function polygon_draw(){

        shapetype = robotcode[idy][4];
        polygonno = parseInt(robotcode[idy][5])-1;
//      接合点テーブルから中点の座標xの取得
       if(robotcode[idy][9].substr(0,1) === "S") {
           for(i=0; i<joinsumax; i++){
              if(jointbl[i].kinds === robotcode[idy][9]){
                  midpointx = jointbl[i].realadx;
                  break;
              }
           }
       } else {
//         多角形の中心座標x
           midpointx = parseInt(robotcode[idy][9]);
       }

//      接合点テーブルから中点の座標yの取得
       if(robotcode[idy][10].substr(0,1) === "S") {
           for(i=0; i<joinsumax; i++){
              if(jointbl[i].kinds === robotcode[idy][10]){
                  midpointy = jointbl[i].realady;
                  break;
              }
           }
       } else {
//         多角形の中心座標y
           midpointy = parseInt(robotcode[idy][10]);
       }

        polysax = 0; polysay = 0;
        if(robotcode[idy][11].substr(0,1) === "(") {
//         差分データとして保存
           polysax = parseInt(robotcode[idy][11].substr(1,4));
           polysay = parseInt(robotcode[idy][11].substr(6,4));
        } else {
           if((robotcode[idy][11].substr(0,1) != "△") && (robotcode[idy][11].substr(0,1) != "(")) {
//            回転角度データをして保存。
              dr = parseInt(robotcode[idy][11]);
              if((robotcode[idy][1].substr(0,1) === "2") || (robotcode[idy][1].substr(0,1) === "4")) {
                 dr = 360 - dr;
              }
              if(dr >= 360) dr - 360;
           } else {
                dr = 0;
           }

        }
        y1sv = 0; x1sv =0;

//      差異が0でない場合は、中点に差異を加味する。
        if(polysay != 0) y1sv = midpointy + polysay;
        if(polysax != 0) x1sv = midpointx + polysax;
//      角度が設定されているなら回転させる。
        if(dr != 0) {
//          回転する変数を計算
            vBase1_c = Math.cos(dr*(Math.PI/180));
            vBase1_s = Math.sin(dr*(Math.PI/180));
        }

        fsw = 1;
        for(j=0;j<bw;j++){
            if(polygonzh[polygonno][j].flag === 1){
                if(dr !=0){
//                座標を回転させる。
                  xx = polygonzh[polygonno][j].polyx+x1sv - midpointx;
                  yy = polygonzh[polygonno][j].polyy+y1sv - midpointy;
                  px =  parseInt(xx * vBase1_c - yy * vBase1_s)+midpointx;
                  py =  parseInt(xx * vBase1_s + yy * vBase1_c)+midpointy;
                } else {
//                多角形テーブルよりデータと差分を計算し座標を算出
                  px = polygonzh[polygonno][j].polyx+x1sv;
                  py = polygonzh[polygonno][j].polyy+y1sv;
                }
//                座標を描画する。
                  if(fsw === 1){
                       //     カラーナンバーをワークに編集する。
                       wkcolor = parseInt(robotcode[idy][8]);
                       ctx.beginPath();
                       ctx.moveTo(px*mgf+dfsx,py*mgf+dfsy);
                       fsw = 0;
                  } else { 
                       ctx.lineTo(px*mgf+dfsx,py*mgf+dfsy);
                  }
              }
         }
//       多角形を描画出力
         if(fsw === 0){
             ctx.closePath();
             ctx.fillStyle = bordcolor[ocolno][wkcolor];
             ctx.fill();
         }

 

}

 


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« テーブルデータからロボット... | トップ | 日本トラックレース »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

ゲーム開発(Game development)」カテゴリの最新記事