Action Script 3.0 HitTestObject 不工作?
Action Script 3.0 HitTestObject Not Working?
帮帮我..我正在为我的学校项目制作角色扮演游戏,但 NPC01 class 中的代码 hitTestObject 无法正常工作。
这是我的代码:
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)
好像撞上了
但是当我在 Game.as 函数循环下编写 hitTestObject 代码时,当玩家击中 npc 时跟踪输出显示。
我移动字符 'player' 没问题。
抱歉我的英语不好。
我也在 NPC01.as 循环函数下尝试了这些:
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" 正在响应..
这是您拥有的 DisplayObjects:
- (游戏):游戏
- 地图:地图
- 玩家:玩家
- npc:NPC
- npc01:NPC01
- 玩家:玩家
- npc:MovieClip
请注意,您已经创建了两名玩家(一名在游戏中,一名在 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() {
}
}
问题是您正在创建两个不同的 玩家对象,而您只需要一个。
这应该更适合您的目的:
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!!");
}
}
帮帮我..我正在为我的学校项目制作角色扮演游戏,但 NPC01 class 中的代码 hitTestObject 无法正常工作。
这是我的代码:
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)
好像撞上了
但是当我在 Game.as 函数循环下编写 hitTestObject 代码时,当玩家击中 npc 时跟踪输出显示。
我移动字符 'player' 没问题。
抱歉我的英语不好。
我也在 NPC01.as 循环函数下尝试了这些:
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" 正在响应..
这是您拥有的 DisplayObjects:
- (游戏):游戏
- 地图:地图
- 玩家:玩家
- npc:NPC
- npc01:NPC01
- 玩家:玩家
- npc:MovieClip
请注意,您已经创建了两名玩家(一名在游戏中,一名在 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() {
}
}
问题是您正在创建两个不同的 玩家对象,而您只需要一个。
这应该更适合您的目的:
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!!");
}
}