Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【CSS/作りかけ】3D迷路表示に挑戦中

 どうも!LSSです!!

 

CSSの立体表現を使って、3D迷路表示に挑戦してみました。

まだ改善点は多いですが^^;

 

 

3D迷路(作りかけ)

 
 
 
 
 
 
 
 

 

壁は適当にデザインしました。

f:id:little_strange:20211219232817p:plain

↑こういう位置から見た感じを表現した図、です。

 

 

コード

<style>
.waku{
position:relative;
background-color:#000000;
width:300px;height:300px;
transform-style:preserve-3d;
perspective:500px;
perspective-origin:50% 47%;
overflow:hidden;
}
.waku div{
position:absolute;
width:200px;height:200px;
top:50px;left:50px;
background-image:repeating-linear-gradient(180deg,#448844 25%,#000000 30%);
}
.l1{transform-origin:0px 100px;transform:rotateY(270deg);z-index:9;}
.l2{transform-origin:0px 100px;transform:translateZ(-200px) rotateY(270deg);z-index:7;}
.l3{transform-origin:0px 100px;transform:translateZ(-400px) rotateY(270deg);z-index:5;}
.r1{transform-origin:200px 100px;transform:rotateY(90deg);z-index:9;}
.r2{transform-origin:200px 100px;transform:translateZ(-200px) rotateY(90deg);z-index:7;}
.r3{transform-origin:200px 100px;transform:translateZ(-400px) rotateY(90deg);z-index:5;}
.lf1{transform:translateX(-200px);z-index:8;}
.f1{transform:translateZ(0px);z-index:8;}
.rf1{transform:translateX(200px);z-index:8;}
.lf2{transform:translateX(-200px) translateZ(-200px);z-index:6;}
.f2{transform:translateZ(-200px);z-index:6;}
.rf2{transform:translateX(200px) translateZ(-200px);z-index:6;}
.lf3{transform:translateX(-200px) translateZ(-400px);z-index:4;}
.f3{transform:translateZ(-400px);z-index:4;}
.rf3{transform:translateX(200px) translateZ(-400px);z-index:4;}
</style>
<div class="waku">
<div class="r1"> </div>
<div class="lf1"> </div>
<div class="l2"> </div>
<div class="lf2"> </div>
<div class="r3"> </div>
<div class="rf3"> </div>
<div class="lf3"> </div>
<div class="f3"> </div>
</div>

 

 

やってる事

transform-style:preserve-3d;
perspective:500px;

とした、幅・高さ300pxの枠内に、真ん中にくるように幅・高さ200pxの「壁」を複数描いています。

側面の壁になるものはrotateYで回転、奥に位置するものはtranslateZで移動させています。

 

<div class="r1"> </div>
<div class="lf1"> </div>
<div class="l2"> </div>
<div class="lf2"> </div>
<div class="r3"> </div>
<div class="rf3"> </div>
<div class="lf3"> </div>
<div class="f3"> </div>

これらが一行=一枚の壁となりますが、表示位置が書いた順によっておかしくならないよう、CSSのほうでz-indexを指定しています。

 

 

問題点

コードが煩雑すぎます^^;;;;

クラスの複数指定を使ってでも、もうちょっとマシな書き方が出来るはず…。

 

 

今後

自分で納得のいく書き方ができたら…

little-strange.hatenablog.com

これと組み合わせて、遊べる迷路にしたいところですね^^

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^