大家好,我正在这个小型的tamogachi游戏上做我的大学项目,我把它拖放到char上,他的健康或金钱wtv根据它改变,我们不得不用多个班级来做,所以eveything很好,除了如果没有通过不同的类正确注册,则为hitTestObject。
这是我的代码,我的所有项目文件链接也附在下面请帮助:
项目文件的链接:https://drive.google.com/folderview?id=0B07PZ7vQgjsteWhVMnItczd2YUE&usp=sharing
主类:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
public class Main extends MovieClip {
public var addStuff:AddStuff = new AddStuff;
public var hmClass:HealthMoney = new HealthMoney;
public function Main() {
addChild(addStuff.bg);
addStuff.batMan.x = 700;
addStuff.batMan.y = 600;
addChild(addStuff.batMan);
addChild(addStuff.box);
addStuff.box.x = 1050;
addStuff.box.y = 500;
addChild(addStuff.batHealth);
addStuff.batHealth.x = 890;
addStuff.batHealth.y = 430;
addChild(addStuff.dollar);
addStuff.dollar.x = 890;
addStuff.dollar.y = 570;
addChild(addStuff.men);
addStuff.men.x = 800;
addStuff.men.y = 900;
addChild(addStuff.batBurger);
addStuff.batBurger.x = 400;
addStuff.batBurger.y = 900;
addChild(addStuff.batDrink);
addStuff.batDrink.x = 600;
addStuff.batDrink.y = 900;
addChild(addStuff.batMoney);
addStuff.batMoney.x = 850;
addStuff.batMoney.y = 940;
AddHealth();
AddMoney();
}
public function AddHealth(){
hmClass.HealthTimer();
addChild(hmClass.myHealthText);
addEventListener(Event.ENTER_FRAME,Kill);
function Kill(e:Event){
if(hmClass.health <= 0){
hmClass.batLifeTimer.stop();
addStuff.batMan.rotation -= 1;
if(addStuff.batMan.rotation <= -80){
addStuff.batMan.alpha = -5;
}
}
}
}
public function AddMoney(){
addChild(hmClass.myMoneyText);
hmClass.Money();
}
}
}
AddStuff Class:
package {
public class AddStuff{
public var bg:BG = new BG();
public var batHealth:BatHealth = new BatHealth();
public var batMan:BatMan = new BatMan();
public var batBurger:BatBurger = new BatBurger();
public var batDrink:BatDrink = new BatDrink();
public var batMoney:BatMoney = new BatMoney();
public var men:Men = new Men();
public var box:Box = new Box();
public var dollar:Dollar = new Dollar();
public function AddStuff() {
}
}
}
HealthMoney类:
package {
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.text.TextField;
import flash.events.Event;
import flash.display.MovieClip;
import flash.text.TextFormat;
import flash.events.MouseEvent;
public class HealthMoney extends MovieClip{
public var health:int = 100;
public var money:int = 100;
public var batLifeTimer:Timer = new Timer(1000);
public var myHealthText:TextField = new TextField();
public var myHealthTextFormat:TextFormat = new TextFormat();
public var myMoneyText:TextField = new TextField();
public var myMoneyTextFormat:TextFormat = new TextFormat();
public var addStuffClass:AddStuff = new AddStuff;
public var addStuff1:AddStuff = new AddStuff;
public function HealthMoney() {
// constructor code
}
public function HealthTimer(){
myHealthText.setTextFormat(myHealthTextFormat);
myHealthTextFormat.size = 120;
myHealthTextFormat.color = 0xFFFFFF;
myHealthText.defaultTextFormat = myHealthTextFormat;
//myHealthText.border = true;
myHealthText.x = 970;
myHealthText.y = 350;
myHealthText.width = 200;
myHealthText.height = 120;
batLifeTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener (e:TimerEvent):void{
health--;
//trace(health);
myHealthText.text = health.toString();
}
batLifeTimer.start();
addEventListener(Event.ENTER_FRAME, BatBurger);
function BatBurger(e:Event):void{
if(addStuff1.batMan.hitTestObject(addStuff1.batBurger)){
health++;
//trace("yo");
}
}
}
public function Money():void{
myMoneyText.setTextFormat(myMoneyTextFormat);
myMoneyTextFormat.size = 120;
myMoneyTextFormat.color = 0xFFFFFF;
myMoneyText.defaultTextFormat = myMoneyTextFormat;
myMoneyText.border = true;
myMoneyText.x = 970;
myMoneyText.y = 500;
myMoneyText.width = 500;
myMoneyText.height = 200;
//addChild(myMoneyText);
myMoneyText.text = money.toString();
addEventListener(MouseEvent.MOUSE_UP, AddMoney);
function AddMoney(e:MouseEvent):void{
if(addStuff1.batMoney.hitTestObject(addStuff1.batMan)){
myMoneyText.text = money.toString();
money = money + 100;
trace("hey");
}
}
}
}
}
和DraggableItem类:
(这个类是我要拖动的所有对象的基类)
package {
import flash.events.MouseEvent;
import flash.display.MovieClip;
public class DraggableItem extends MovieClip{
public function DraggableItem() {
addEventListener(MouseEvent.MOUSE_DOWN, startmove);
addEventListener(MouseEvent.MOUSE_UP, stopmove);
}
public function startmove(e:MouseEvent){
this.startDrag();
}
public function stopmove(e:MouseEvent){
this.stopDrag();
}
}
}
答案 0 :(得分:0)
试试这个:
主要课程:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.display.Stage;
public class Main extends MovieClip {
public static var stageRef:Stage;
public var addStuff:AddStuff = new AddStuff;
public var hmClass:HealthMoney;
public function Main() {
stageRef = stage;
addChild(addStuff.bg);
addStuff.batMan.x = 700;
addStuff.batMan.y = 600;
addChild(addStuff.batMan);
addChild(addStuff.box);
addStuff.box.x = 1050;
addStuff.box.y = 500;
addChild(addStuff.batHealth);
addStuff.batHealth.x = 890;
addStuff.batHealth.y = 430;
addChild(addStuff.dollar);
addStuff.dollar.x = 890;
addStuff.dollar.y = 570;
addChild(addStuff.men);
addStuff.men.x = 800;
addStuff.men.y = 900;
addChild(addStuff.batBurger);
addStuff.batBurger.x = 400;
addStuff.batBurger.y = 900;
addChild(addStuff.batDrink);
addStuff.batDrink.x = 600;
addStuff.batDrink.y = 900;
addChild(addStuff.batMoney);
addStuff.batMoney.x = 850;
addStuff.batMoney.y = 940;
hmClass = new HealthMoney(addStuff);
AddHealth();
AddMoney();
}
public function AddHealth(){
hmClass.HealthTimer();
addChild(hmClass.myHealthText);
addEventListener(Event.ENTER_FRAME,Kill);
function Kill(e:Event){
if(hmClass.health <= 0){
hmClass.batLifeTimer.stop();
addStuff.batMan.rotation -= 1;
if(addStuff.batMan.rotation <= -80){
addStuff.batMan.alpha = -5;
}
}
}
}
public function AddMoney(){
addChild(hmClass.myMoneyText);
hmClass.Money();
}
}
}
HealthMoney类:
package {
import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.text.TextField;
import flash.events.Event;
import flash.display.MovieClip;
import flash.text.TextFormat;
import flash.events.MouseEvent;
public class HealthMoney extends MovieClip{
public var health:int = 100;
public var money:int = 100;
public var batLifeTimer:Timer = new Timer(1000);
public var myHealthText:TextField = new TextField();
public var myHealthTextFormat:TextFormat = new TextFormat();
public var myMoneyText:TextField = new TextField();
public var myMoneyTextFormat:TextFormat = new TextFormat();
public var addStuffClass:AddStuff = new AddStuff;
public var addStuff1:AddStuff;
public function HealthMoney(addStuff:AddStuff) {
this.addStuff1 = addStuff;
}
public function HealthTimer(){
myHealthText.setTextFormat(myHealthTextFormat);
myHealthTextFormat.size = 120;
myHealthTextFormat.color = 0xFFFFFF;
myHealthText.defaultTextFormat = myHealthTextFormat;
//myHealthText.border = true;
myHealthText.x = 970;
myHealthText.y = 350;
myHealthText.width = 200;
myHealthText.height = 120;
batLifeTimer.addEventListener(TimerEvent.TIMER, timerListener);
function timerListener (e:TimerEvent):void{
health--;
//trace(health);
myHealthText.text = health.toString();
}
batLifeTimer.start();
addEventListener(Event.ENTER_FRAME, BatBurger);
function BatBurger(e:Event):void{
if(addStuff1.batMan.hitTestObject(addStuff1.batBurger)){
health++;
//trace("yo");
}
}
}
public function Money():void{
myMoneyText.setTextFormat(myMoneyTextFormat);
myMoneyTextFormat.size = 120;
myMoneyTextFormat.color = 0xFFFFFF;
myMoneyText.defaultTextFormat = myMoneyTextFormat;
myMoneyText.border = true;
myMoneyText.x = 970;
myMoneyText.y = 500;
myMoneyText.width = 500;
myMoneyText.height = 200;
//addChild(myMoneyText);
myMoneyText.text = money.toString();
Main.stageRef.addEventListener(MouseEvent.MOUSE_UP, AddMoney);
function AddMoney(e:MouseEvent):void{
if(addStuff1.batMoney.hitTestObject(addStuff1.batMan)){
myMoneyText.text = money.toString();
money = money + 100;
trace("hey");
}
}
}
}
}
行&#34; public static var stageRef:Stage;&#34;创建一个Stage类型的静态变量。可以从其他类访问静态变量,而无需该类的实例。
行&#34; stageRef = stage&#34;基本上将stageRef的值设置为stage。您只需编写&#34; Main.stageRef&#34;即可访问stageRef。你需要一个舞台实例,因为行#34; Main.stageRef.addEventListener(MouseEvent.MOUSE_UP,AddMoney);&#34;在HealthMoney类中。如果您只编写&#34; addEventListener(MouseEvent.MOUSE_UP,AddMoney);&#34 ;,则mouse_up事件将无法正常工作,因为焦点位于舞台上。
行&#34; hmClass = new HealthMoney(addStuff);&#34;将AddStuff类的实例发送到HealthMoney构造函数。你需要这样做,因为如果你写了#34; addStuff1 = new AddStuff&#34;,你将创建一个新的AddStuff实例,而新的AddStuff实例没有你在主类中添加的动画片段,这将是使hittestobject不会触发。