js鍵盤事件實(shí)現(xiàn)人物的行走
本文實(shí)例為大家分享了js鍵盤事件實(shí)現(xiàn)人物行走的具體代碼,供大家參考,具體內(nèi)容如下
描述:
小時(shí)候喜歡玩的一個(gè)游戲,魔塔,實(shí)現(xiàn)了人物的行走,以及跳躍,當(dāng)然是2D的效果。
用到的圖:

效果:

代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
html
{
background-color: deepskyblue;
}
div
{
width: 32px;
height: 32px;
background-image: url("img/Actor01-Braver03.png");
position: absolute;
}
</style>
</head>
<body>
<div></div>
<script>
var key=0;
var bool=false;
var speed=2;//每次行走的距離
var actor;//人物div
const HEIGHT=33;//人物的高
const WIDTH=32;//人物的寬
var arr=[1,3,2,0];//4排圖像 代表 下 左 右 上
var num=0;
var jumpBool=false;
var actorSkinSpeed=8;
var jumpSpeed=-15;
init();
function init() {
window.addEventListener("keydown",keyHandler);
window.addEventListener("keyup",keyHandler);
actor=document.querySelector("div");
setInterval(animation,16);
//按鍵驅(qū)動(dòng)不能實(shí)現(xiàn) 實(shí)現(xiàn)的是通過按鍵觸發(fā)相應(yīng)動(dòng)畫 實(shí)現(xiàn)我們的人物的幀動(dòng)畫 跳轉(zhuǎn)
}
function keyHandler(e) {
bool=e.type==="keydown";
key=e.keyCode;
if(!bool){
num=0;
actor.style.backgroundPositionX=-num*WIDTH+"px";
}
if(key===32 && !jumpBool){//跳躍 空格驅(qū)動(dòng)
jumpBool=true;
}
}
function animation() {
jump();
if(!bool)return;
walk();//單方向行走 實(shí)現(xiàn)
changeDirection();//方向確定時(shí) 內(nèi)部行走的實(shí)現(xiàn)
}
function jump() {
if(!jumpBool)return;
jumpSpeed+=1;
if(jumpSpeed===15){
jumpBool=false;
jumpSpeed=-15;
return;
}
actor.style.top=actor.offsetTop+jumpSpeed+"px";
}
function changeDirection() {
actorSkinSpeed--;
if(actorSkinSpeed>0) return;
actorSkinSpeed=8;
num++;
if(num>3) num=0;
actor.style.backgroundPositionX=-num*WIDTH+"px";
}
function walk() {
switch (key){
case 37://左 ×1 第二排
actor.style.left=actor.offsetLeft-speed+"px";
actor.style.backgroundPositionY=-arr[0]*HEIGHT+"px";
break;
case 38://上 ×3 第四排
actor.style.top=actor.offsetTop-speed+"px";
actor.style.backgroundPositionY=-arr[1]*HEIGHT+"px";
break;
case 39://右 ×2 第三排
actor.style.left=actor.offsetLeft+speed+"px";
actor.style.backgroundPositionY=-arr[2]*HEIGHT+"px";
break;
case 40://下 ×0 第一排
actor.style.top=actor.offsetTop+speed+"px";
actor.style.backgroundPositionY=-arr[3]*HEIGHT+"px";
break;
}
}
</script>
</body>
</html>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
javascript寫的一個(gè)鏈表實(shí)現(xiàn)代碼
今天在百度上看到有人問怎么用Javascript 寫一個(gè)學(xué)生管理系統(tǒng)。個(gè)人認(rèn)為沒有什么實(shí)現(xiàn)價(jià)值。無聊練練手吧,很久沒寫JS了。2009-10-10
JS判斷字符串變量是否含有某個(gè)字串的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄狫S判斷字符串變量是否含有某個(gè)字串的實(shí)現(xiàn)方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-06-06
前端實(shí)現(xiàn)全局主題切換功能實(shí)例代碼
這篇文章主要介紹了如何使用ReactHook和Context實(shí)現(xiàn)全局主題切換的功能,通過創(chuàng)建一個(gè)Context對(duì)象和一個(gè)ThemeProvider組件,可以將當(dāng)前主題存儲(chǔ)在Context中,并提供一個(gè)切換主題的方法,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2025-03-03
JS實(shí)現(xiàn)點(diǎn)擊li標(biāo)簽彈出對(duì)應(yīng)的索引功能【案例】
這篇文章主要介紹了JS實(shí)現(xiàn)點(diǎn)擊li標(biāo)簽彈出對(duì)應(yīng)的索引功能,結(jié)合具體實(shí)例形式分析了javascript事件響應(yīng)、元素遍歷等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02
自己編寫的支持Ajax驗(yàn)證的JS表單驗(yàn)證插件
創(chuàng)建一個(gè)JavaScript表單驗(yàn)證插件,可以說是一個(gè)繁瑣的過程,涉及到初期設(shè)計(jì)、開發(fā)與測(cè)試等等環(huán)節(jié)。實(shí)際上一個(gè)優(yōu)秀的程序員不僅是技術(shù)高手,也應(yīng)該是善假于外物的。本文介紹的這個(gè)不錯(cuò)的JavaScript表單驗(yàn)證插件,支持ajax驗(yàn)證,有需要的小伙伴可以參考下2015-05-05

