Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
Actionscript 3 “你好”;“反弹”;使用Actionscript 3.0进行碰撞检测?(附短片)_Actionscript 3_Collision Detection - Fatal编程技术网

Actionscript 3 “你好”;“反弹”;使用Actionscript 3.0进行碰撞检测?(附短片)

Actionscript 3 “你好”;“反弹”;使用Actionscript 3.0进行碰撞检测?(附短片),actionscript-3,collision-detection,Actionscript 3,Collision Detection,首先,我很惊讶actionscript 3.0没有基于像素的碰撞检测 无论如何,我使用的是碰撞库(如果需要,我愿意选择另一个库) 我想更好地展示我在做什么,简言之,我正在做一个侧滚游戏(像马里奥),我希望我的地面(地板)像地面一样行动。。。当用户在地面上行走时,lol 起初,我想做一个“反弹”效果,比如“如果用户在地面以下X个数量,然后把他推上去”。这看起来不错,但我发现我能做到这一点的唯一方法是让我的用户在触地时不停地跳(不是在视频中) 那么,有人知道如何获得它吗?这样,当我的用户在行走时,他

首先,我很惊讶actionscript 3.0没有基于像素的碰撞检测

无论如何,我使用的是碰撞库(如果需要,我愿意选择另一个库)

我想更好地展示我在做什么,简言之,我正在做一个侧滚游戏(像马里奥),我希望我的地面(地板)像地面一样行动。。。当用户在地面上行走时,lol

起初,我想做一个“反弹”效果,比如“如果用户在地面以下X个数量,然后把他推上去”。这看起来不错,但我发现我能做到这一点的唯一方法是让我的用户在触地时不停地跳(不是在视频中)


那么,有人知道如何获得它吗?这样,当我的用户在行走时,他在地面上山时,它也会使用户的char上升?

今天在reddit.com上发布了一篇文章,关于您的问题中碰撞检测部分是什么

真正的逻辑是当你检测到碰撞时该怎么做。然而,你有没有注意到大多数侧滚游戏是如何使用平坦的行走面

一个想法(不需要碰撞检测)是使用类似idea的高度贴图。可以使用阵列(或纹理中的像素)来确定曲面上每个地面部分的高度。当角色在场景中移动时,只需将角色的位置索引到高度贴图中

// How many pixels each index of the heightMap contains.
// You'll probably want to use the same value as the distance
// your character moves when the move left/right key is pressed.
const SECTION_SIZE:int = 10; 

// Fill this as a huge array with all the heights and
// the size of this will be (mapHorizontalLengthInPixels / SECTION_SIZE).
// Each element will be the distance from the top of the screen to 
// place the character so it looks like it is standing on the ground.
var heightMap:Array = [ /* ... */ ];

// TODO: you might want to Tween to this value so it doesn't look chunky
character.y = heightMap[character.x / SECTION_SIZE];
要使用纹理而不是数组,只需将本应放入
heightMap
数组中的每个
int
放入BitmapData对象的单个像素中。使用纹理的优点是可以将大量信息存储在一个小的BitmapData对象中,然后使用getPixel32()将其读出。您可以生成一次贴图,将其保存(如png),然后将其嵌入SWF


如果你想变得有趣,如果你想要平台、桥梁、移动物体等等,你可能会喜欢的。。。然后使用2d物理引擎。现在已经有一些开源项目,包括、等。学习曲线会更高,编码也会更困难,但最终可能会给你带来回报。见鬼,如果你喜欢的话,从头开始写一本书本身就是一种体验

看起来您正在检测与地面的垂直碰撞,但忽略了水平碰撞。但是,你需要将播放器推到物体的顶部,而不是仅仅在击中水平物体时停止(即,地板上的1像素变化将被视为与墙壁相同,并且你必须跳过它)。你也希望在这里有一个断线,这样玩家在击中墙壁时不会被推到墙顶。例如,当检测到水平碰撞时,将播放器移动到对象顶部,除非对象顶部距离当前位置>10像素。

谢谢您的帮助!实际上,我切换到了你提到的像素检测库。我最后做的是做一个边界,然后把我的地面变成两个不同的物体。因此,如果我的球员击中边界,那么重力停止拉动。。。但如果我的播放器处于“填充”(越过边界)状态,它会不断将其向上推3个像素,直到其位于上方。只要边界是安全的,我认为它的工作效果出奇地好。向上的像素数越低,感觉越平滑,但推到边界上方也需要更长的时间。