Actionscript 3 如何堆叠MovieClips-AS3
我的问题如下: 我正在做一个游戏,有一个阶段书会掉下来 X轴(因为用户设备的方向是图片)和一只“小手”比拉它检测到的书本hitTestObject,X轴和Y轴成为“小手” 为了使书籍保持正确的堆叠状态,我在舞台上使用了一个名为“高度”的变量,书落在小手上,这个变量时间会随着书的高度而更新,然后我用这个变量将书放在X轴上Actionscript 3 如何堆叠MovieClips-AS3,actionscript-3,flash,methods,movieclip,Actionscript 3,Flash,Methods,Movieclip,我的问题如下: 我正在做一个游戏,有一个阶段书会掉下来 X轴(因为用户设备的方向是图片)和一只“小手”比拉它检测到的书本hitTestObject,X轴和Y轴成为“小手” 为了使书籍保持正确的堆叠状态,我在舞台上使用了一个名为“高度”的变量,书落在小手上,这个变量时间会随着书的高度而更新,然后我用这个变量将书放在X轴上 private function loop(event:Event){ var maozinha = palco.mao; if(t
private function loop(event:Event){
var maozinha = palco.mao;
if(this.hitTestObject(maozinha)){
this.y = maozinha.y;
this.x -= palco.altura;
palco.velocidade = 10;
palco.gravidade = 2;
palco.altura += 47;
palco.pontos += 20;
isOnHand = true;
removeEventListener(Event.ENTER_FRAME, loop);
} else {
palco.velocidade += palco.gravidade;
x += palco.velocidade;
}
if(x >= 940){
removeEventListener(Event.ENTER_FRAME, loop);
palco.life = false;
palco.removeChild(this);
}
}
}
我想知道的是,是否有某种方法可以让他们自动检测,甚至当他们触摸小手或他的兄弟时,他们检测到它并停在外点,我需要在不计算高度的情况下停留
下面是用作书籍的类模型
package {
import flash.display.MovieClip;
import flash.events.*;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.display.Sprite;
import flash.display.*;
public class Lverde extends Sprite {
//VARS
private var palco:Object;
private var isOnHand:Boolean = false;
public function Lverde() {
addEventListener(Event.ADDED_TO_STAGE, inicia);
}
private function inicia(event:Event){
addEventListener(Event.ENTER_FRAME, loop);
addEventListener(Event.ENTER_FRAME, gameOverThis);
addEventListener(Event.ENTER_FRAME, bookOnHand);
addEventListener(Event.ENTER_FRAME, touchBook);
addEventListener(Event.ENTER_FRAME, vitoria);
palco = MovieClip(root);
}
private function gameOverThis(event:Event){
if(palco.life == false){
removeEventListener(Event.ENTER_FRAME, gameOverThis);
removeEventListener(Event.ENTER_FRAME, bookOnHand);
removeEventListener(Event.ENTER_FRAME, touchBook);
removeEventListener(Event.ENTER_FRAME, vitoria);
palco.removeChild(this);
}
}
private function vitoria(event:Event){
if(palco.pontos >= 200){
palco.vitoria = true;
palco.removeChild(this);
removeEventListener(Event.ENTER_FRAME, gameOverThis);
removeEventListener(Event.ENTER_FRAME, bookOnHand);
removeEventListener(Event.ENTER_FRAME, touchBook);
removeEventListener(Event.ENTER_FRAME, vitoria);
}
}
private function bookOnHand(event:Event) {
if(isOnHand == true){
var maozinha = palco.mao;
y = maozinha.y;
}
}
private function touchBook(event:Event){
if(isOnHand == false){
for(var i:int = 0; i < palco.getChildByName("lverde").numChildren-1; i++){
var lverde = palco.getChildByName("lverde").getChildAt(i);
if(hitTestObject(lverde) && isOnHand == false){
palco.velocidade = 10;
palco.gravidade = 2;
palco.altura += 47;
palco.pontos += 20;
isOnHand = true;
trace("Tocou o livro verde");
removeEventListener(Event.ENTER_FRAME, loop);
removeEventListener(Event.ENTER_FRAME, touchBook);
}
}
for(var i:int = 0; i < palco.getChildByName("lvermelho").numChildren-1; i++){
var lvermelho = palco.getChildByName("lvermelho").getChildAt(i);
if(hitTestObject(lvermelho) && isOnHand == false){
palco.velocidade = 10;
palco.gravidade = 2;
palco.altura += 68;
palco.pontos += 20;
isOnHand = true;
removeEventListener(Event.ENTER_FRAME, loop);
removeEventListener(Event.ENTER_FRAME, touchBook);
}
}
for(var i:int = 0; i < palco.getChildByName("lmarrom").numChildren-1; i++){
var lmarrom = palco.getChildByName("lmarrom").getChildAt(i);
if(hitTestObject(lmarrom) && isOnHand == false){
palco.velocidade = 10;
palco.gravidade = 2;
palco.altura += 40;
palco.pontos += 20;
isOnHand = true;
removeEventListener(Event.ENTER_FRAME, loop);
removeEventListener(Event.ENTER_FRAME, touchBook);
}
}
}
}
private function loop(event:Event){
var maozinha = palco.mao;
if(this.hitTestObject(maozinha)){
this.y = maozinha.y;
this.x -= palco.altura;
palco.velocidade = 10;
palco.gravidade = 2;
palco.altura += 47;
palco.pontos += 20;
isOnHand = true;
removeEventListener(Event.ENTER_FRAME, loop);
} else {
palco.velocidade += palco.gravidade;
x += palco.velocidade;
}
if(x >= 940){
removeEventListener(Event.ENTER_FRAME, loop);
palco.life = false;
palco.removeChild(this);
}
}
}
}
包{
导入flash.display.MovieClip;
导入flash.events.*;
导入flash.events.MouseEvent;
导入flash.ui.Mouse;
导入flash.display.Sprite;
导入flash.display.*;
公共类Lverde扩展了Sprite{
//瓦尔斯
私有var-palco:对象;
私有变量isOnHand:Boolean=false;
公共职能部门{
addEventListener(Event.ADDED_至_阶段,inicia);
}
私有函数inicia(事件:事件){
addEventListener(Event.ENTER_FRAME,循环);
addEventListener(Event.ENTER_FRAME,gameOverThis);
addEventListener(Event.ENTER_FRAME,bookOnHand);
addEventListener(Event.ENTER_FRAME,touchBook);
addEventListener(Event.ENTER_FRAME,维多利亚);
palco=MovieClip(根);
}
私人功能游戏此(事件:事件){
if(palco.life==false){
removeEventListener(Event.ENTER_FRAME,gameOverThis);
removeEventListener(Event.ENTER_FRAME,bookOnHand);
removeEventListener(Event.ENTER_FRAME,touchBook);
removeEventListener(Event.ENTER_FRAME,维多利亚);
帕尔科·雷莫维奇(本);
}
}
私人功能维多利亚(活动:活动){
如果(palco.pontos>=200){
palco.vitoria=正确;
帕尔科·雷莫维奇(本);
removeEventListener(Event.ENTER_FRAME,gameOverThis);
removeEventListener(Event.ENTER_FRAME,bookOnHand);
removeEventListener(Event.ENTER_FRAME,touchBook);
removeEventListener(Event.ENTER_FRAME,维多利亚);
}
}
现有私人功能书(事件:事件){
如果(isOnHand==true){
var maozinha=palco.mao;
y=maozinha.y;
}
}
专用功能触摸簿(事件:事件){
如果(isOnHand==false){
对于(变量i:int=0;i=940){
removeEventListener(Event.ENTER_FRAME,循环);
生命=虚假;
帕尔科·雷莫维奇(本);
}
}
}
}
谢谢你。我大致知道你想说什么(老实说,这是用很蹩脚的英语写的)。 所以你的书从左到右掉落,你想让“小手”抓住它们。如果第一本书碰到手,它就会停在那里,粘在手上。 现在,有一种方法可以让其他书籍堆叠在顶部