การทำ Sprite คือการทำ Animation จากรูปภาพหลายๆภาพเล่นต่อกันเพื่อให้เกินเป็นภาพเคลื่อนไหว ลองนึกภาพฟิมล์ภาพยนต์สมัยก่อนน่าจะพอนึกภาพออกครับ ซึ่งปัจจุบัน css เองสามารถทำ Animation เรี่ยงรูปแบบนี้ได้เองโดยไม่ต้องพึ่ง javascript ก็ได้
จากตัวอย่าง เราจะเริ่มต้นจากการหารูปที่ใช้สำหรับการทำ ซึ่งหาได้จากตามเว็บ ฟรี game art ต่างๆ จะมีรูปพวกนี้อยู่พอสมควร ซึ่งรูปที่ได้มาจะเป็นแบบนี้ครับ
ซึ่งรูปนี้ ยาว 720 px สูง 80 px ตัดได้ทั้งหมด 9 ช่อง (frame ละ 80*80 px) ซึ่งวิธีการทำรูปแล้วแต่คนถนัดเพราะมีทั้ง โปรแกรมสำเร็จ หรือในโปรแกรมแต่งรูปแต่ที่สำคัญคือความกว้างต่อ frame ต้องทำกัน
หลังจากเตรียมรูปแล้วเราก็จะมาทำการ animation กัน
1 การทำ animation background
.gamebox{ background-position: 0px 0px; background-repeat: repeat-x; background-image:url(bg1.jpg); width:600px; height:600px; margin:auto; position: relative; animation: animatedBackground 40s linear infinite; /* ในส่วนนี้คือการเรียก animation background ครับ */ } @keyframes animatedBackground { from { background-position: 0 0; } to { background-position: 100% 0; } }
2 การทำ Animation ตัวอัศวิน และ มังกร ซึ่งส่วนสำคัญ คือ background possiton , step และเวลา ครับ
/* Knight */ .knight { position: absolute; bottom: 65px; width: 80px; height: 80px; left:35%; background: url(kinght.png) no-repeat; background-position: 0 0; cursor: pointer; animation: knight_walk 1s infinite steps(8); } .knight:hover { background-position: -640px 0; transition: background 1s steps(8); } @keyframes knight_walk { 0% { background-position: 0 0; } 100% { background-position: -640px 0; } } /* Dragon Fly */ .dragon { position: absolute; bottom: 150px; width: 80px; height: 80px; left:30%; background: url(dragon.png) no-repeat; background-position: 0 0; cursor: pointer; animation: dragon_fly 1s infinite steps(8); } .knight:hover { background-position: -640px 0; transition: background 1s steps(8); } @keyframes dragon_fly { 0% { background-position: 0 0; } 100% { background-position: -640px 0; } }
ในส่วนของ code ทั้งหมดสามารถ Download ไปลองดูได้ครับ