忍者ブログ
管の万年筆についての日記
2  3  4  5  6  7  8  9  10  11 
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

立方体の変な形になるバグを改良しました。
ソースも乗せておきます。
数字が表示されていますが、
点の番号と座標です。
影のつけ方なんかは適当です。

 

var ax = 0;
var ay = 0;
var v = 60;
var s = Stage.width / 2 / Math.tan(v / 2 * Math.PI / 180);
var emp: Array = new Array();
var cha: Number = 0;
var cl = new Array();
for(i = 0; i < cl.length; i++){
 cl[i] = new Array();
}
cl = [
[-50, 50, -50],
[50, 50, -50],
[50, 50, 50],
[-50, 50, 50],
[-50, -50, -50],
[50, -50, -50],
[50, -50, 50],
[-50, -50, 50]
];
var cw = new Array();
for(i = 0; i < cl.length; i++){
 cw[i] = new Array();
}
var cwx = new Array();
for(i = 0; i < cl.length; i++){
 cwx[i] = new Array();
}
var cwy = new Array();
for(i = 0; i < cl.length; i++){
 cwy[i] = new Array();
}
var cc = new Array();
var cp = new Array();
var cv = new Array();
cc = [0, 0, 400];
cp = [
[0, 1, 4, 0xB0B0B0],
[1, 4, 5, 0xB0B0B0],
[2, 6, 7, 0xC0C0C0],
[2, 3, 7, 0xC0C0C0],
[0, 1, 3, 0xA0A0A0],
[1, 2, 3, 0xA0A0A0],
[5, 6, 7, 0xD0D0D0],
[4, 5, 7, 0xD0D0D0],
[0, 3, 4, 0x909090],
[3, 4, 7, 0x909090],
[2, 5, 6, 0xE0E0E0],
[1, 2, 5, 0xE0E0E0]
];

 

this.onEnterFrame = function()
{
 this.clear();
 for(i = 0; i < cl.length; i++){
  cwx[i][0] = cl[i][0];
  cwx[i][1] = cl[i][1] * Math.cos(ax * Math.PI / 180) - cl[i][2] * Math.sin(ax * Math.PI / 180);
  cwx[i][2] = cl[i][1] * Math.sin(ax * Math.PI / 180) + cl[i][2] * Math.cos(ax * Math.PI / 180);
 }
 for(i = 0; i < cwx.length; i++){
  cwy[i][0] = cwx[i][0] * Math.cos(ay * Math.PI / 180) + cwx[i][2] * Math.sin(ay * Math.PI / 180);
  cwy[i][1] = cwx[i][1];
  cwy[i][2] = - cwx[i][0] * Math.sin(ay * Math.PI / 180) + cwx[i][2] * Math.cos(ay * Math.PI / 180);
 }
 for(i = 0; i < cwy.length; i++){
  cw[i][0] = cwy[i][0] + cc[0];
  cw[i][1] = cwy[i][1] + cc[1];
  cw[i][2] = cwy[i][2] + cc[2];
 }
 for(i = 0; i < cw.length; i++){
  cv[i] = [s * cw[i][0] / cw[i][2], s * cw[i][1] / cw[i][2]];
 }
 do{
  cha = 0;
  for(i = 0; i + 1 < cp.length; i++){
   if(Math.sqrt(Math.pow((cw[cp[i][0]][0] + cw[cp[i][1]][0] + cw[cp[i][2]][0]) / 3, 2) + Math.pow((cw[cp[i][0]][1] + cw[cp[i][1]][1] + cw[cp[i][2]][1]) / 3, 2) + Math.pow((cw[cp[i][0]][2] + cw[cp[i][1]][2] + cw[cp[i][2]][2]) / 3, 2)) < Math.sqrt(Math.pow((cw[cp[i + 1][0]][0] + cw[cp[i + 1][1]][0] + cw[cp[i + 1][2]][0]) / 3, 2) + Math.pow((cw[cp[i + 1][0]][1] + cw[cp[i + 1][1]][1] + cw[cp[i + 1][2]][1]) / 3, 2) + Math.pow((cw[cp[i + 1][0]][2] + cw[cp[i + 1][1]][2] + cw[cp[i + 1][2]][2]) / 3, 2))){
    emp = cp[i];
    cp[i] = cp[i + 1];
    cp[i + 1] = emp;
    cha++;
   }
  }
 }while(cha > 0);
 for(i = 0; i < cp.length; i++){
  this.beginFill(cp[i][3]);
  this.lineStyle(0, cp[i][3]);
  this.moveTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
  this.lineTo(cv[cp[i][1]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][1]][1]);
  this.lineTo(cv[cp[i][2]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][2]][1]);
  this.lineTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
  this.endFill();
 }
 /*
 for(i = 0; i < cp.length; i++){
  this.lineStyle(1, 0x000000);
  this.moveTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
  this.lineTo(cv[cp[i][1]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][1]][1]);
  this.lineTo(cv[cp[i][2]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][2]][1]);
  this.lineTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
 }
 */
 for(i = 0; i < cv.length; i++){
  this.createTextField("text_" + i, i + 1, cv[i][0] + Stage.width / 2, Stage.height / 2 - cv[i][1], 20, 20);
  this["text_" + i].setNewTextFormat(new TextFormat("MS Pゴシック", 16, 0xFF0000, false, false, false));
  this["text_" + i].text = i;
  this.createTextField("text_" + i + cv.length, i + cv.length + 1, cv[i][0] + Stage.width / 2 + 20, Stage.height / 2 - cv[i][1], 100, 10);
  this["text_" + i + cv.length].setNewTextFormat(new TextFormat("MS Pゴシック", 6, 0x0000FF, false, false, false));
  this["text_" + i + cv.length].text = "( " + Math.round(cw[i][0] * 100) / 100 + ", " + Math.round(cw[i][1] * 100) / 100 + ", " + Math.round(cw[i][2] * 100) / 100 + ")";
 }
 if(Key.isDown(Key.UP))
 {
  cc[2] += 10;
 }
 if(Key.isDown(Key.DOWN))
 {
  cc[2] -= 10;
 }
 if(Key.isDown(Key.LEFT))
 {
  cc[0] -= 10;
 }
 if(Key.isDown(Key.RIGHT))
 {
  cc[0] += 10;
 }
 if(Key.isDown(Key.PGUP))
 {
  cc[1] += 10;
 }
 if(Key.isDown(Key.PGDN))
 {
  cc[1] -= 10;
 }
 if(Key.isDown(Key.ENTER)){
  trace("ax:"+ax);
  trace("ay:"+ay);
  for(i = 0; i < cw.length; i++){
   trace("CW"+ i + " : " + cw[i]);
  }
 }
};

this.onMouseDown = function()
{
 dn = true;
 mx = this._xmouse;
 my = this._ymouse;
 
};

this.onMouseUp = function()
{
 dn = false;
};

this.onMouseMove = function()
{
 if(dn){
  if(this._xmouse > mx){
   ay -= 3;
  }else if(this._xmouse < mx){
   ay += 3;
  }
  mx = this._xmouse;
  if(this._ymouse > my){
   ax -= 3;
  }else if(this._ymouse < my){
   ax += 3;
  }
  my = this._ymouse;
 }
};

PR
THERE ARE A FEW DIFFERENCES BETWEEN THE NEWER ONE AND THE OLDER ONE.
少し変えました。
しかも、前よりも重くなりました。
今日、朝起きると、雪が積もっていました。
しかし、溶けてしまいました(当たり前)。

昨年の何月だったか忘れましたが、
2008年の10月にカラスのゲームを完成させるというのを予告しました。
なんとなく、シューティングゲームを作ってみたくなったので、
素材を掘り返して、作ってみました。
とりあえず、ボスだけです。
というより、ボスだけで終わりです。
すぐに完成させる予定だったのに4日もかかってしまいました。
音楽も雑、
グラフィックも雑、
プログラムも雑ですが、
まあやってみてください。

こちらから

操作方法
矢印キーで移動
スペースで発射

目的
3発敵に当てる。

※注意
重力があります。

敵ははっきり言って、最強です。
無敵です。
まだ、1発も当てられません……。

どうやらネタ切れのようなので、
ソースを公開します。
新潟県のです。

 

_global.ax = 0;
_global.ay = 0;
_global.v = 60;
_global.s = Stage.width / 2 / Math.tan(v / 2 * Math.PI / 180);
var emp: Array = new Array();
var cha: Number = 0;
_global.cl = new Array();
_global.cw = new Array();
_global.cc = new Array();
_global.cp = new Array();
for(i = 0; i < 119; i++){
 _global.cp[i] = new Array();
 _global.cp[i][3] = 0x000000;
}
_global.cv = new Array();
_global.cl = [
[75, 25, 95],
[50, 25, 30],
[0, 25, 0],
[-25, 25, -45],
[-120, 25, -105],
[-110, 25, -130],
[-90, 25, -115],
[-55, 25, -120],
[-20, 25, -105],
[-10, 25, -135],
[30, 25, -100],
[45, 25, -105],
[50, 25, -45],
[75, 25, -30],
[75, 25, -15],
[95, 25, 5],
[85, 25, 20],
[90, 25, 55],
[110, 25, 65],
[90, 25, 70],
[75, -25, 95],
[50, -25, 30],
[0, -25, 0],
[-25, -25, -45],
[-120, -25, -105],
[-110, -25, -130],
[-90, -25, -115],
[-55, -25, -120],
[-20, -25, -105],
[-10, -25, -135],
[30, -25, -100],
[45, -25, -105],
[50, -25, -45],
[75, -25, -30],
[75, -25, -15],
[95, -25, 5],
[85, -25, 20],
[90, -25, 55],
[110, -25, 65],
[90, -25, 70],

 

[-35, 25, 70],
[-60, 25, 40],
[-60, 25, 30],
[-50, 25, 30],
[-60, 25, 5],
[-50, 25, 5],
[-25, 25, 35],
[-40, 25, 35],
[-35, -25, 70],
[-60, -25, 40],
[-60, -25, 30],
[-50, -25, 30],
[-60, -25, 5],
[-50, -25, 5],
[-25, -25, 35],
[-40, -25, 35]
];
_global.cw = cl;
for(i = 0; i < cl.length; i++){
 _global.cw[i][0] = cl[i][0];
 _global.cw[i][1] = cl[i][1] * Math.cos(ax * Math.PI / 180) - cl[i][2] * Math.sin(ax * Math.PI / 180);
 _global.cw[i][2] = cl[i][1] * Math.sin(ax * Math.PI / 180) + cl[i][2] * Math.cos(ax * Math.PI / 180);
}
for(i = 0; i < cl.length; i++){
 _global.cw[i][0] = cw[i][0] * Math.cos(ay * Math.PI / 180) + cw[i][2] * Math.sin(ay * Math.PI / 180);
 _global.cw[i][1] = cw[i][1];
 _global.cw[i][2] = - cw[i][0] * Math.sin(ay * Math.PI / 180) + cw[i][2] * Math.cos(ay * Math.PI / 180);
}
_global.cc = [0, 0, 400];
for(i = 0; i < cl.length; i++){
 _global.cw[i][0] += cc[0];
 _global.cw[i][1] += cc[1];
 _global.cw[i][2] += cc[2];
}

for(i = 0; i < 20; i++){
 if(i == 4 || i == 14 || i == 17){
  _global.cp[i][0] = 12;
  _global.cp[i][1] = i;
  _global.cp[i][2] = i + 2;
  i++;
 }else{
  _global.cp[i][0] = 12;
  _global.cp[i][1] = i;
  _global.cp[i][2] = (i == 19) ? (0) : (i + 1);
 }
}
_global.cp[20] = [4, 5, 6];
_global.cp[21] = [14, 15, 16];
_global.cp[22] = [17, 18, 19];
for(i = 0; i < 20; i++){
 if(i == 24 || i == 34 || i == 37){
  _global.cp[i + 23][0] = 32;
  _global.cp[i + 23][1] = i + 20;
  _global.cp[i + 23][2] = i + 22;
  i++;
 }else{
  _global.cp[i + 23][0] = 32;
  _global.cp[i + 23][1] = i + 20;
  _global.cp[i + 23][2] = (i == 19) ? (20) : (i + 21);
 }
}
_global.cp[44] = [4, 5, 6];
_global.cp[45] = [14, 15, 16];
_global.cp[46] = [17, 18, 19];
for(i = 0; i < 20; i++){
 _global.cp[i + 47][0] = i;
 _global.cp[i + 47][1] = (i == 19) ? (0) : (i + 1);
 _global.cp[i + 47][2] = i + 20;
}
for(i = 0; i < 20; i++){
 _global.cp[i + 67][0] = (i == 19) ? (0) : (i + 1);
 _global.cp[i + 67][1] = i + 20;
 _global.cp[i + 67][2] = (i == 19) ? (20) : (i + 21);
}

for(i = 0; i < 8; i++){
 _global.cp[i + 87][0] = 47;
 _global.cp[i + 87][1] = i + 40;
 _global.cp[i + 87][2] = (i == 7) ? (40) : (i + 41);
}
for(i = 0; i < 8; i++){
 _global.cp[i + 95][0] = 55;
 _global.cp[i + 95][1] = i + 48;
 _global.cp[i + 95][2] = (i == 7) ? (48) : (i + 49);
}
for(i = 0; i < 8; i++){
 _global.cp[i + 103][0] = i + 40;
 _global.cp[i + 103][1] = (i == 7) ? (40) : (i + 41);
 _global.cp[i + 103][2] = i + 48;
}
for(i = 0; i < 8; i++){
 _global.cp[i + 111][0] = (i == 7) ? (40) : (i + 41);
 _global.cp[i + 111][1] = i + 48;
 _global.cp[i + 111][2] = (i == 7) ? (48) : (i + 49);
}

onEnterFrame = function()
{
 _root.clear();
 _global.cw = cl;
 _global.cl = [
 [75, 25, 95],
 [50, 25, 30],
 [0, 25, 0],
 [-25, 25, -45],
 [-120, 25, -105],
 [-110, 25, -130],
 [-90, 25, -115],
 [-55, 25, -120],
 [-20, 25, -105],
 [-10, 25, -135],
 [30, 25, -100],
 [45, 25, -105],
 [50, 25, -45],
 [75, 25, -30],
 [75, 25, -15],
 [95, 25, 5],
 [85, 25, 20],
 [90, 25, 55],
 [110, 25, 65],
 [90, 25, 70],
 [75, -25, 95],
 [50, -25, 30],
 [0, -25, 0],
 [-25, -25, -45],
 [-120, -25, -105],
 [-110, -25, -130],
 [-90, -25, -115],
 [-55, -25, -120],
 [-20, -25, -105],
 [-10, -25, -135],
 [30, -25, -100],
 [45, -25, -105],
 [50, -25, -45],
 [75, -25, -30],
 [75, -25, -15],
 [95, -25, 5],
 [85, -25, 20],
 [90, -25, 55],
 [110, -25, 65],
 [90, -25, 70],
 
 [-35, 25, 70],
 [-60, 25, 40],
 [-60, 25, 30],
 [-50, 25, 30],
 [-60, 25, 5],
 [-50, 25, 5],
 [-25, 25, 35],
 [-40, 25, 35],
 [-35, -25, 70],
 [-60, -25, 40],
 [-60, -25, 30],
 [-50, -25, 30],
 [-60, -25, 5],
 [-50, -25, 5],
 [-25, -25, 35],
 [-40, -25, 35]
 ];
 for(i = 0; i < cl.length; i++){
  _global.cw[i][0] = cl[i][0];
  _global.cw[i][1] = cl[i][1] * Math.cos(ax * Math.PI / 180) - cl[i][2] * Math.sin(ax * Math.PI / 180);
  _global.cw[i][2] = cl[i][1] * Math.sin(ax * Math.PI / 180) + cl[i][2] * Math.cos(ax * Math.PI / 180);
 }
 for(i = 0; i < cl.length; i++){
  _global.cw[i][0] = cw[i][0] * Math.cos(ay * Math.PI / 180) + cw[i][2] * Math.sin(ay * Math.PI / 180);
  _global.cw[i][1] = cw[i][1];
  _global.cw[i][2] = - cw[i][0] * Math.sin(ay * Math.PI / 180) + cw[i][2] * Math.cos(ay * Math.PI / 180);
 }
 for(i = 0; i < cl.length; i++){
  _global.cw[i][0] += cc[0];
  _global.cw[i][1] += cc[1];
  _global.cw[i][2] += cc[2];
 }
 for(i = 0; i < cw.length; i++){
  _global.cv[i] = [s * cw[i][0] / cw[i][2], s * cw[i][1] / cw[i][2]];
 }
 do{
  cha = 0;
  for(i = 0; i + 1 < cp.length; i++){
   if(Math.sqrt(Math.pow((cw[cp[i][0]][0] + cw[cp[i][1]][0] + cw[cp[i][2]][0]) / 3, 2) + Math.pow((cw[cp[i][0]][1] + cw[cp[i][1]][1] + cw[cp[i][2]][1]) / 3, 2) + Math.pow((cw[cp[i][0]][2] + cw[cp[i][1]][2] + cw[cp[i][2]][2]) / 3, 2)) < Math.sqrt(Math.pow((cw[cp[i + 1][0]][0] + cw[cp[i + 1][1]][0] + cw[cp[i + 1][2]][0]) / 3, 2) + Math.pow((cw[cp[i + 1][0]][1] + cw[cp[i + 1][1]][1] + cw[cp[i + 1][2]][1]) / 3, 2) + Math.pow((cw[cp[i + 1][0]][2] + cw[cp[i + 1][1]][2] + cw[cp[i + 1][2]][2]) / 3, 2))){
    emp = cp[i];
    _global.cp[i] = cp[i + 1];
    _global.cp[i + 1] = emp;
    cha++;
   }
  }
 }while(cha > 0);
 for(i = 0; i < cp.length; i++){
  _root.beginFill(cp[i][3]);
  _root.lineStyle(0, cp[i][3]);
  _root.moveTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
  _root.lineTo(cv[cp[i][1]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][1]][1]);
  _root.lineTo(cv[cp[i][2]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][2]][1]);
  _root.lineTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
  _root.endFill();
 }
 /*for(i = 0; i < cp.length; i++){
  _root.lineStyle(1, 0x000000);
  _root.moveTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
  _root.lineTo(cv[cp[i][1]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][1]][1]);
  _root.lineTo(cv[cp[i][2]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][2]][1]);
  _root.lineTo(cv[cp[i][0]][0] + Stage.width / 2, Stage.height / 2 - cv[cp[i][0]][1]);
 }*/
 
 if(Key.isDown(Key.UP))
 {
  _global.cc[2] += 10;
 }
 if(Key.isDown(Key.DOWN))
 {
  _global.cc[2] -= 10;
 }
 if(Key.isDown(Key.LEFT))
 {
  _global.cc[0] -= 10;
 }
 if(Key.isDown(Key.RIGHT))
 {
  _global.cc[0] += 10;
 }
 if(Key.isDown(Key.PGUP))
 {
  _global.cc[1] += 10;
 }
 if(Key.isDown(Key.PGDN))
 {
  _global.cc[1] -= 10;
 }
};

onMouseDown = function()
{
 dn = true;
 mx = _root._xmouse;
 my = _root._ymouse;
};

onMouseUp = function()
{
 dn = false;
};

onMouseMove = function()
{
 if(dn){
  if(_root._xmouse > mx){
   _global.ay -= 4;
  }else if(_root._xmouse < mx){
   _global.ay += 4;
  }
  mx = _root._xmouse;
  if(_root._ymouse > my){
   _global.ax -= 4;
  }else if(_root._ymouse < my){
   _global.ax += 4;
  }
  my = _root._ymouse;
 }
};
 


結構長いですね。
ちなみに_globalなのは、
外から数値を変えられるようにです。
やはり汚く、しかも長いので、
少し直したいと思います。
問題です。
下のシルエットは何でしょう?
(ドラッグで動かせます。)
分かった人は是非コメントしてください。
ソースはかなり汚いので、
出しません。

結構重いです。
御碗も少し変わりました。

6角形でなく12角形のも作ったのですが、
重すぎたのでやめました。

今、3Dでつくるのに嵌っているので、
作って欲しいものがあれば、気軽にどうぞ。

ただしシルエットです。
カレンダー
10 2024/11 12
S M T W T F S
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
AdSense
FLASH

NO CONTENT

ブログ内検索
"hosepens" WROTE ALL ARTICLES.
PRODUCED BY SHINOBI.JP @ SAMURAI FACTORY INC.
忍者ブログ [PR]