2012-10-23 69 views
-1

我正在制作一个随机生成的地板,但是当电影剪辑走在它上面时,它似乎表现得像一块巨大的地板,MovieClip在它上面行走,而不是跟随图像,这里是代码:随机生成的方形地板

import flash.display.Sprite; 
import flash.display.MovieClip; 
import flash.events.Event; 

//variables 

var h:Number = 360; 
var floor:MovieClip=new MovieClip; 
var guy:MovieClip=new MovieClip; 
var gravity=10; 

guy.graphics.beginFill(000000); 
guy.graphics.drawRect(100,100,15,25); 
guy.graphics.endFill(); 
addChild(guy);//guy creation 


//floor generation 
for (var i:int=0; i<600; i++) 
{ 

    if (h==360) 
    { 
     if (Math.random() <= 0.75) 
     { 
      floor.graphics.beginFill(000000); 
      floor.graphics.drawRect(i,h,40,40); 
      floor.graphics.endFill(); 
      addChild(floor); 
      i += 39; 
     } 
     else 
     { 
      i += 39; 
     } 
     if (i>550) 
     { 
      h = 320; 
      i = 0; 
     } 
    } 
    if (h==320) 
    { 
     if (Math.random() <= 0.75) 
     { 
      floor.graphics.beginFill(000000); 
      floor.graphics.drawRect(i,h,40,40); 
      floor.graphics.endFill(); 
      addChild(floor); 
      i += 39; 
     } 
     else 
     { 
      i += 39; 
     } 
    } 
} 


//listeners doesnt matter 
addEventListener(Event.ENTER_FRAME,misc); 
addEventListener(KeyboardEvent.KEY_UP,checkup); 
addEventListener(KeyboardEvent.KEY_DOWN,checkdown); 


//functions 

var leftarrow:Boolean=false; 
var rightarrow:Boolean=false; 

function checkdown(a:KeyboardEvent) 
{ 
    if(a.keyCode==37)leftarrow=true; 
    if(a.keyCode==39)rightarrow=true; 
} 

function checkup(a:KeyboardEvent) 
{ 
    if(a.keyCode==37)leftarrow=false; 
    if(a.keyCode==39)rightarrow=false; 
} 

function misc(a:Event) 
{ 
    guy.y+=gravity; 

    if(guy.hitTestObject(floor)) 
    { 
     gravity=0; 
    }else{gravity=10;} 

    if(leftarrow)guy.x-=5; 
    if(rightarrow)guy.x+=5; 
} 

在此先感谢。

回答

0

功能hitTestObject评估两个DisplayObject实例的bounding boxes。你的角色滑过你的地板上的洞和坑,因为边界框封装了这些洞和坑。

检测凹面上的碰撞是困难的。您可能更容易用几个凸形(而不是单个凹形)构建地板,并在每个凸形上使用hitTestObject

var blocks:Array = [ ]; 

for (var i:int = 0; i < 10; i++) 
{ 
    // Add a convex floor block to blocks. 
} 

... 

gravity = 10 

for each (var block:DisplayObject in blocks) 
{ 
    if (guy.hitTestObject(block)) 
    { 
     gravity = 0; 
     break; 
    } 
} 
+0

谢谢你,但你知道如何制作一个凸起的地板?你说我必须一块一块地做? – Henke

+0

是的,我会建议(对于这样一个简单的游戏),你从各个块建立地板。您可以针对屏幕上的每个块测试字符。 – 2012-10-24 14:28:43