FC2ブログ

JavaScript いぢり 

線と四角形の当たり判定をまとめてみた。
と言っても基本phina.jsので使う前提。

基本・AB線とCD線の当たり判定。
tg=[Ax,Ay,Bx,By,Cx,Cy,Dx,Dy];//tgの中身。
var Chclossline = function(tg){
var ta = (tg[4] - tg[6]) * (tg[1] - tg[5]) + (tg[5] - tg[7]) * (tg[4] - tg[0]);
var tb = (tg[4] - tg[6]) * (tg[3] - tg[5]) + (tg[5] - tg[7]) * (tg[4] - tg[2]);
var tc = (tg[0] - tg[2]) * (tg[5] - tg[1]) + (tg[1] - tg[3]) * (tg[0] - tg[4]);
var td = (tg[0] - tg[2]) * (tg[7] - tg[1]) + (tg[1] - tg[3]) * (tg[0] - tg[6]);
return tc * td <= 0 && ta * tb <= 0;
};

応用。四角形RectとAB線の当たり判定。
var ClossRectline=function(rect,line){
let hitA=(Rect.left<line[0] && line[0]<Rect.right)&&(Rect.top<line[1]&& line[1]<Rect.bottom);
if(hitA)return true;
let hitB=(Rect.left<line[2] && line[2]<Rect.right)&&(Rect.top<line[3]&& line[3]<Rect.bottom);
if(hitB)return true;
//両端がRectに接触しているかどうか
let lineK=(line[0]<line[2])==(line[1]<line[3]);
let tai=[rect.left,rect[((!lineK)?"top":"bottom")],rect.right,rect[((lineK)?"top":"bottom")];
//判定に使用する対角線を選ぶ

let ChL=Chclossline(tai.concat(line));
if(!ChL)return false;
return true;
};

まだ試してないもの。
立方体cubeと三次元直線AB。
line=[Ax,Ay,Az,Bx,By,Bz]
天井と底はそれぞれ「ue」「sita」で表記。
var CbCloss = function(cube,line){
let ueline=[];// 01[2]34[5]
let yokoline=[];//0[1]23[4]5
for(var i=0;i<6;i++){
let n=line[i];
if(i%3!=2)ueline.push(n);
if(i%3!=1)yokoline.push(n);
}
let ueV=ClossRectline(cube,ueline);
if(!ueV)return false;
let yokoRec={left:cube.left,top:cube.ue,rihght:cube.right,bottom:cube.sita};
let yokoV=ClossRectline(yokoRec,yokoline);
if(!yokoV)return false;
return true;
};
スポンサーサイト



[ 2019/11/24 12:25 ] ゲームいぢり | TB(0) | CM(0)

基本的には 

自分が欲しいから作るのだ。

というわけで覚えたアレそれをつかって、
期間イベントノルマ管理を手直し。

タイマーの頃はできなかったものを詰め詰と。
個人的なこだわりとしてはテキストから設定入れるとこ。

……ルナドンぽいの作れるようなりたいのう。
[ 2018/09/22 18:35 ] ゲームいぢり | TB(0) | CM(0)

作るは楽し、直しは難し、 

既存に組み込むとなれば苦難の道。
あと、整理整頓みたいなのも個人的に、うん。
そっから他の事始めるんやで、うん、うん。

で、こんなのいじくりだす。
引いた線がどろりーぬ。
Runstant
[ 2018/07/24 08:45 ] ゲームいぢり | TB(0) | CM(0)

こういう色が大好き 

いまこんな感じ。
まだ障害物はすり抜ける。
ぼやぼや

[ 2018/05/25 08:00 ] ゲームいぢり | TB(0) | CM(0)

phina.jsとCanvas覚え書き 

Spriteに使う画像用のCanvas「だけ」が欲しい時。
及び諸々のこと。

var phinaCanvas=phina.graphics.Canvas();
phinaCanvas.setSize(width,height)
var pCcontext=phinaCanvas.context;
ここでCanvas作成とサイズ、ついでにcontext決定。
上記Canvasに描いたものをdrawImageとかで使いたい場合。
var domcanvas=phinaCanvas.domElement;
domElementをくっつけるとphina仕様でない普通のCanvasが取得できる。

一応ライブラリ乗り換えても使えそうなものにしときたいなあとか。
[ 2018/04/25 08:32 ] ゲームいぢり | TB(0) | CM(0)
ぶつくさ



ブログ内検索
カレンダー
11 | 2019/12 | 01
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 - - - -
カウンター
ブロとも申請フォーム