帮我..。我正在为我的学校项目制作rpg,NPC01类中的代码NPC01不起作用。
这是我的密码:
Game.as
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Game extends MovieClip{
var map:Map = new Map();
var player:Player = new Player();
var npc:NPC = new NPC();
public function Game(){
addChild(map);
addChild(npc);
addChild(player);
this.addEventListener(Event.ENTER_FRAME,loop);
}
private function loop():void {
npc.x = map.x;
npc.y = map.y;
}
}
}NPC.as
package {
import flash.display.MovieClip;
import flash.events.Event;
public class NPC extends MovieClip {
var npc01:NPC01 = new NPC01();
public function NPC() {
// constructor code
addChild(npc01);
npc01.x = 20;
npc01.y = 0;
}
}
}NPC01.as
package {
import flash.display.MovieClip;
import flash.events.Event;
public class NPC01 extends MovieClip {
var player:Player = new Player();
public function NPC01() {
// constructor code
this.addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void
{
if(player.hitTestObject(npc)) { //npc is a movieclip inside NPC01
trace("HIT!!");
}
}我没有错误信息。只是,每当玩家的电影点击npc电影,输出就不会出现..。
我还试图通过以下方式跟踪他们的位置:
trace( player.getBounds(stage) );
trace( npc.getBounds(stage) );结果:
(x=343, y=218, w=26, h=45)
(x=334, y=218, w=32, h=51)他们好像在碰撞。
但是当我在函数循环下的hitTestObject中编写Game.as代码时,跟踪输出会在播放器点击npc时显示出来。
我不介意把角色扮演者的角色移来移去。
对不起我的英语不好。
我还在loop 01中尝试了下面的循环函数:
if (npc.hitTestObject(player)) {
trace("Hit01");
}
if (npc.hitTestObject(player)) {
trace("Hit02");
}
if (npc.hitTestPoint(player.x, player.y, true)) {
trace("Hit03");
}
if (player.hitTestPoint(npc.x, npc.y, true)) {
trace("Hit04");
} 但只有"Hit03“回应。
发布于 2015-02-03 09:37:10
问题是,当您只需要one时,您正在创建两个不同的 Player对象。
这样做对您的目的应该更好:
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Game extends MovieClip{
var map:Map = new Map();
var player:Player = new Player();
var npc:NPC = new NPC(player);
public function Game(){
addChild(map);
addChild(npc);
addChild(player);
this.addEventListener(Event.ENTER_FRAME,loop);
}
private function loop():void {
npc.x = map.x;
npc.y = map.y;
}
}}
package {
import flash.display.MovieClip;
import flash.events.Event;
public class NPC extends MovieClip {
var player:Player;
var npc01:NPC01;
public function NPC(player:Player) {
// constructor code
this.player = player;
npc01 = new NPC01(player);
addChild(npc01);
npc01.x = 20;
npc01.y = 0;
}
}}
package {
import flash.display.MovieClip;
import flash.events.Event;
public class NPC01 extends MovieClip {
var player:Player;
public function NPC01(player:Player) {
// constructor code
this.player = player;
this.addEventListener(Event.ENTER_FRAME, loop);
}
private function loop(e:Event):void
{
if(player.hitTestObject(npc)) { //npc is a movieclip inside NPC01
trace("HIT!!");
}
}发布于 2015-02-03 06:55:37
下面是您拥有的DisplayObjects:
注意,您已经创建了两个播放器(一个在游戏中,一个在NPC01中)。你确定你的测试是对的吗?
我猜你可能只想要一个。尝尝这个。
package {
import flash.display.MovieClip;
import flash.events.Event;
public class Game extends MovieClip{
var map:Map = new Map();
var player:Player = new Player();
var npc:NPC = new NPC();
public function Game(){
addChild(map);
addChild(npc);
addChild(player);
this.addEventListener(Event.ENTER_FRAME,loop);
}
private function loop():void {
npc.x = map.x;
npc.y = map.y;
if(player.hitTestObject(npc)) {
trace("HIT!!");
}
}}
并将播放机从NPC01中删除:
package {
import flash.display.MovieClip;
import flash.events.Event;
public class NPC01 extends MovieClip {
public function NPC01() {
}
}https://stackoverflow.com/questions/28292573
复制相似问题