Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 让玩家停在隐形平台前_Javascript_Html_Canvas_Html5 Canvas_Game Physics - Fatal编程技术网

Javascript 让玩家停在隐形平台前

Javascript 让玩家停在隐形平台前,javascript,html,canvas,html5-canvas,game-physics,Javascript,Html,Canvas,Html5 Canvas,Game Physics,所以我正在设计一个2d平台,我想给它加上墙壁和平台,但是当我试着做一个平台时,如果玩家只是向前走,它不会让玩家停在它前面,而是让它有点像台阶/楼梯 以下是我目前掌握的情况: var-ctx,控制器,矩形,循环; ctx=document.querySelector(“canvas”).getContext(“2d”); //屏幕大小 ctx.canvas.height=200; ctx.canvas.width=400; //球员位置 矩形={ 身高:25, 跳跃:是的, 宽度:25, x:1

所以我正在设计一个2d平台,我想给它加上墙壁和平台,但是当我试着做一个平台时,如果玩家只是向前走,它不会让玩家停在它前面,而是让它有点像台阶/楼梯

以下是我目前掌握的情况:

var-ctx,控制器,矩形,循环;
ctx=document.querySelector(“canvas”).getContext(“2d”);
//屏幕大小
ctx.canvas.height=200;
ctx.canvas.width=400;
//球员位置
矩形={
身高:25,
跳跃:是的,
宽度:25,
x:10,
x_速度:0,
y:0,
y_速度:0
};
控制器={
左:错,
右:错,
上:错,
keyListener:函数(事件){
var key_state=(event.type=“keydown”)?true:false;
开关(event.keyCode){
案例37://左
controller.left=按键状态;
打破
案例39://对
controller.right=按键状态;
打破
案例38://以上
controller.up=按键状态;
打破
};
}
};
循环=函数(){
if(controller.up&&rectangle.jumping==false){
矩形y_速度-=25;
矩形。跳跃=真;
};
if(控制器左){
矩形x_速度-=0.75;
};
如果(控制器右侧){
矩形x_速度+=0.75;
};
//重力
矩形y_速度+=1.5;
矩形.x+=矩形.x_速度;
矩形.y+=矩形.y\u速度;
//摩擦
矩形x_速度*=0.75;
矩形y_速度*=0.75;
//地板
如果(矩形y>150-25){
矩形跳跃=假;
矩形y=150-25;
矩形y_速度=0;
};
//平台
如果(矩形.y>145-25和矩形.x>150-25){
矩形跳跃=假;
矩形y=145-25;
矩形y_速度=0;
};
//背景
var bg=新图像;
bg.src=”https://i.imgur.com/He3uld9.png";
bg.onload=函数(){
ctx.drawImage(bg,0,0);
};
//玩家
var-ply=新图像;
ply.src=”https://i.imgur.com/G4UUkIl.png";
ply.onload=函数(){
ctx.drawImage(层,矩形.x,矩形.y);
};
//地板
var fl=新图像;
fl.src=”https://i.imgur.com/OoKP4Mm.png";
fl.onload=函数(){
ctx.drawImage(fl,0150);
};
window.requestAnimationFrame(循环);
};
window.addEventListener(“keydown”,controller.keyListener);
window.addEventListener(“keyup”,controller.keyListener);
window.requestAnimationFrame(循环)

如果您尝试根据您所在的区域在矩形上维护
blockedRight
blockedLeft
属性,该怎么办?例如,我在下面实现了一个
blockedRight
布尔值,其中对于平台区域,我将其转换为
,对于有效区域,我将其转换回
。此外,我还将此条件签入
控制器。右
检查

因此,对于出现的障碍区域,您可以设置一个条件,即如果该人是
blockedRight
,并且它试图跳跃,您将再次将
blockedRight
设置为false。我假设障碍物将始终由
跳跃
来处理,除非你的跳跃高度大于你的并且有更多的检查

var-ctx,控制器,矩形,循环;
ctx=document.querySelector(“canvas”).getContext(“2d”);
//屏幕大小
ctx.canvas.height=200;
ctx.canvas.width=400;
//球员位置
矩形={
身高:25,
跳跃:是的,
宽度:25,
x:10,
x_速度:0,
y:0,
y_速度:0,
blockedRight:错误
};
控制器={
左:错,
右:错,
上:错,
keyListener:函数(事件){
var key_state=(event.type=“keydown”)?true:false;
开关(event.keyCode){
案例37://左
controller.left=按键状态;
打破
案例39://对
controller.right=按键状态;
打破
案例38://以上
controller.up=按键状态;
打破
};
}
};
循环=函数(){
if(controller.up&&rectangle.jumping==false){
矩形y_速度-=25;
矩形。跳跃=真;
};
if(控制器左){
矩形x_速度-=0.75;
};
if(controller.right&!rectangle.blockedRight){
矩形x_速度+=0.75;
};
//重力
矩形y_速度+=1.5;
矩形.x+=矩形.x_速度;
矩形.y+=矩形.y\u速度;
//摩擦
矩形x_速度*=0.75;
矩形y_速度*=0.75;
//地板
如果(矩形y>150-25){
矩形跳跃=假;
矩形y=150-25;
矩形y_速度=0;
};
//有效地
如果(矩形x 145-25和矩形x>150-25){
rectangle.blockedRight=true;
矩形跳跃=假;
矩形y=145-25;
矩形y_速度=0;
};
//背景
var bg=新图像;
bg.src=”https://i.imgur.com/He3uld9.png";
bg.onload=函数(){
ctx.drawImage(bg,0,0);
};
//玩家
var-ply=新图像;
ply.src=”https://i.imgur.com/G4UUkIl.png";
ply.onload=函数(){
ctx.drawImage(层,矩形.x,矩形.y);
};
//地板
var fl=新图像;
fl.src=”https://i.imgur.com/OoKP4Mm.png";
fl.onload=函数(){
ctx.drawImage(fl,0150);
};
window.requestAnimationFrame(循环);
};
window.addEventListener(“keydown”,controller.keyListener);
window.addEventListener(“keyup”,controller.keyListener);
window.requestAnimationFrame(循环)

Hmm,它是否可能无法在平台开始时穿过,但如果它跳过
矩形。x=150-25
,它应该能够在平台上平稳移动。