我正在制作平台游戏。目前我只是想创造引力和平台。我的重力下降,但当我的角色(玩家)与平台发生碰撞时,他立即回到屏幕顶部并再次跌落,并且每次玩家触摸平台时都会不断重复。这是我的代码:
package {
import flash.display.MovieClip;
import flash.events.KeyboardEvent;
import flash.events.Event;
import flash.ui.Keyboard;
public class GameCode extends MovieClip {
var upKey:Boolean;
var leftKey:Boolean;
var rightKey:Boolean;
var jump:Boolean = false;
var xvelocity:int = 10;
var yvelocity:int = 0;
var gravity:Number = 7;
var startPosY:int;
var startPosX:int;
var lastPosY:int;
var lastPosX:int;
public function GameCode() {
// constructor code
}
public function startGame(){
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeyUp);
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeyDown);
stage.addEventListener(Event.ENTER_FRAME, update);
}
function update(evt:Event){
moveCharacter();
yvelocity += gravity;
for (var i:int = 0; i < 10; i++){
if (!platform.hitTestObject(player)){
player.y = yvelocity;
}
if (platform.hitTestObject(player)){
yvelocity = 0;
player.y--;
}
}
}
function moveCharacter(){
lastPosY = player.y;
lastPosX = player.x;
if (leftKey == true){
player.x -= xvelocity;
}
if (rightKey == true){
player.x += xvelocity;
}
if (upKey == true){
if (jump == true){
player.y
}
}
}
function checkKeyDown(evt:KeyboardEvent){
if (evt.keyCode == Keyboard.LEFT){
leftKey = true;
}
else if (evt.keyCode == Keyboard.RIGHT){
rightKey = true;
}
else if (evt.keyCode == Keyboard.UP){
upKey = true;
}
}
function checkKeyUp(evt:KeyboardEvent){
if (evt.keyCode == Keyboard.LEFT){
leftKey = false;
}
else if (evt.keyCode == Keyboard.RIGHT){
rightKey = false;
}
else if (evt.keyCode == Keyboard.UP){
upKey = false;
}
}
}
}
我的角色的实例名称是播放器,我的平台实例只是平台。 显然,我想帮助解决这个问题;我想要的是角色随着重力坠落,落在平台上,能够四处移动,当坠落时角色掉到底部。
答案 0 :(得分:0)
我相信问题在这里:
for (var i:int = 0; i < 10; i++){
if (!platform.hitTestObject(player)){
player.y = yvelocity; // if yvelocity == 0, then so will the player's y
}
if (platform.hitTestObject(player)){
yvelocity = 0;
player.y--;
}
}
你应该检查每个平台是否发生碰撞,如果有一个发生相应的句柄并且突破了循环。
你应该在循环之前通过yvelocity递增你的玩家。
player.y += yvelocity;
如果发生碰撞,您应该设置player.y,以便玩家的脚站在平台上。假设平台的起点位于平台的左上角,而玩家.y是玩家脚的水平,你可以这样做:
player.y = platform.y - 1;
我不会为你编写代码,但逻辑应该可以帮助你。
我还要注意,这个实现没有说明身体的哪个部分与平台发生碰撞。因此,如果玩家跳起并且他的头部与平台相撞,他就会弹出平台的顶部。
此外,如果玩家能够在跌倒时向左/向右移动并移动到身体两侧的一个区域,他会弹出到平台的顶部。
你应该google“as3平台游戏教程”或者那种性质的东西,因为其中一些概念可能会更详细地讨论,包括解决方案。