2012-10-23 118 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