どうも!LSSです!!
以前に、やってみたかったけどうまくいかなかった事があります。
これを使いこなせたら、例えば背景画像のスクロールアニメーションができるなー、とか、以前に作ったとあるゲームの表現性が凄く上がるなー、とか思っていたのですが…。
実はもっと簡単な方法で出来そうな気がしてきました!
- まず、画像を用意します
- background-image:url~で指定するとこうなります
- background-positionプロパティにマイナス値指定
- では、background-positionの値を変更するアニメーションを作ってみます!
- あとがき
まず、画像を用意します
↑以前、散歩記事に使用した画像ですw
で、これを、幅300px・高さ400pxにサイズ指定したdiv要素に
background-image:url('画像ファイルのURL');
として当ててみます。
background-image:url~で指定するとこうなります
コード(分かりやすく改行を入れていますが、改行しなくても大丈夫です)
<div style="
width: 300px; height: 400px;
background-image: url('画像ファイルのURL');
"> </div>
background-positionプロパティにマイナス値指定
background-position: -400px;
という指定を付けたしてみます。
<div style="
width: 300px; height: 400px;
background-image: url('画像ファイルのURL');
background-position: -400px;
"> </div>
…実にあっさりと、切り取り位置を指定した背景画像表示指定ができましたね^^
なお、「画像をずらした結果、画像の端をまたいだらどうなるか?」は、
<div style="
width: 300px; height: 400px;
background-image: url('画像ファイルのURL');
background-position: -600px;
"> </div>
こうなりますね。
既定値で、「background-imageは繰り返し」する事になっているので、見切れた部分は次の繰り返し画像が来る事になります。
もし、繰り返しさせたくない場合は、
background-repeat:no-repeat;
をつけて、
<div style="
width: 300px; height: 400px;
background-image: url('画像ファイルのURL');
background-position: -600px;
background-repeat: no-repeat;
"> </div>
このようになります。
なお、要素のサイズ自体は変わっていません。
例えばborderをつけると、それが確認できます。
では、background-positionの値を変更するアニメーションを作ってみます!
<style><!--
@keyframes bgscr{
0%{background-position:0px;}
100%{background-position:-470px;}
}
--></style>
<div style="
width: 300px; height: 400px;
background-image: url('画像ファイルのURL');
background-repeat: no-repeat;
border: 1px solid black;
animation: bgscr 6s linear 0s infinite alternate;
"> </div>
無事、できました!
これをJavaScriptから指定してやれば、スクロールゲームも作れるって事に!^^
animation: bgscr 6s linear 0s infinite alternate;
を日本語訳すると、
「bgscrというキーフレームで指定した変化を、6秒で動作させる、動作の加速度はlinearで、0秒後から開始。繰り返し回数は無限(infinite)。繰り返し方は、最後までアニメしたら次は逆再生で最初に戻る(alternate)。」
という意味になります。
animationについては
にも書いていますので、よかったら見てください。
あとがき
冒頭に書いた、以前に作ったとあるゲームは、
でした。
いやぁ、内心、「スマホでも遊べる画面サイズ」で、かつ「加速時の疾走感」を出すには背景スクロールかなぁ、と思ってまして。
それを実現するのにどうするか?にかなり遠回りした気がします^^;;;;;
ってなとこで、今回はこのへんで!
次回もまた、よろしくお願いします^^