Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >AS3 TypeError:错误#2007:参数hitTestObject必须为非空

AS3 TypeError:错误#2007:参数hitTestObject必须为非空
EN

Stack Overflow用户
提问于 2013-09-19 12:26:54
回答 1查看 1.8K关注 0票数 0

TypeError:错误#2007:参数hitTestObject必须为非空。

我现在正在进行一场比赛,并试图得到它,这样玩家就会与地面相撞(他已经和桌子相撞了)。

它说这个问题发生在playerOneCollisions

表和地只是具有链接到movieclip的基本类代码的类,它们是扩展的movieclip(如果这很重要),并且它们已经导入了舞台和电影(如果这很重要的话)。

(我认为这些部分很重要)

Player.as

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public var main:Main;
public var table:Table;
public var player:Player;
public var ground:Ground;

        public function playerOneCollisions(table, ground)
        {
            if(this.hitTestObject(table))
            {
                trace("tabled");
                animation = "kong";
            }
            if(this.hitTestObject(ground))
            {
                trace("grounded");
                animation = "idle";
            }
        }

函数playerOneCollisions在Main.as中被调用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function GameClock(timerEvent:TimerEvent):void
        {
            player.playerOnePress();
            player.playerOneKeyResults();
            player.playerOneCollisions(table, ground);
            player.playerAnimaitons();
        }

剩下的代码,如果我对重要部分的理解是错误的

Player.as

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package
{
    import flash.display.Stage;
    import flash.display.MovieClip;
    import flash.events.Event;
    import KeyObject;
    import Table;

    public class Player extends MovieClip
    {
        public var stageRef:Stage;
        public var key:KeyObject;
        public var main:Main;
        public var table:Table;
        public var player:Player;
        public var ground:Ground;       

        public var leftPressed:Boolean = false;
        public var rightPressed:Boolean = false;
        public var upPressed:Boolean = false;
        public var downPressed:Boolean = false;

        public var grounded:Boolean = false;

        public var animation:String = "idle";

        public var runSpeed:Number = 5;

        public var animationState:String = "idle";

        public function Player (stageRef:Stage, X:int, Y:int):void
        {
            this.stageRef = stageRef;
            this.x = X;
            this.y = Y;

            key = new KeyObject(stageRef);
        }
        public function playerOnePress()
        {
            if(key.isDown(37) || key.isDown(65)){ // if left arrow or A is pressed
                leftPressed = true;
                //trace("left pressed");
            } else {
                leftPressed = false;
            }

            if(key.isDown(38) || key.isDown(87)){ // if up arrow or W is pressed
                upPressed = true;
                //trace("up pressed");
            } else {
                upPressed = false;
            }

            if(key.isDown(39) || key.isDown(68)){ //if right arrow or D is pressed
                rightPressed = true;
                //trace("right pressed");
            } else {
                rightPressed = false;
            }

            if(key.isDown(40) || key.isDown(83)){ //if down arrow or S is pressed
                downPressed = true;
                //trace("down pressed");
            } else {
                downPressed = false;
            }
        }
        public function playerOneKeyResults()
        {
            if(leftPressed)
            {
//              trace("left");
                this.x -= runSpeed;
            }else if(rightPressed)
            {
//              trace("right");
                this.x += runSpeed;
            }
        }
        public function playerOneCollisions(table, ground)
        {
            if(this.hitTestObject(table))
            {
                trace("tabled");
                animation = "kong";
            }
            if(this.hitTestObject(ground))
            {
                trace("grounded");
                animation = "idle";
            }
        }
        public function playerAnimaitons()
        {
            if(animation == "kong")
            {
                this.gotoAndStop(2);
            }
            if(animation == "idle")
            {
                this.gotoAndStop(1);
            }
        }
    }
}

Main.as

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package
{
    import flash.display.Stage;
    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.events.TimerEvent;
    import flash.utils.Timer;

    public class Main extends MovieClip
    {
        public var gameTimer:Timer;
        public var player:Player;
        public var table:Table;
        public var ground:Ground;

        public function Main():void
        {
            gameTimer = new Timer (30);
            gameTimer.addEventListener(TimerEvent.TIMER, GameClock);
            gameTimer.start();

            player = new Player(stage, 80, 420);
            stage.addChild(player);
        }
        public function GameClock(timerEvent:TimerEvent):void
        {
            player.playerOnePress();
            player.playerOneKeyResults();
            player.playerOneCollisions(table, ground);
            player.playerAnimaitons();
        }   
    }
}
EN

回答 1

Stack Overflow用户

发布于 2013-09-19 13:03:29

我注意到的一件事是,tableground作为Player的类属性,它们也是您遇到问题的方法的参数。

您的Player类的table和/或ground属性可能为空,因为我没有看到设置它们的代码。

使用与类属性相同的方法参数不是很好的做法。

尝试删除播放机类中的属性。(我没有看到它们被设置或使用)

如果仍然得到错误,请在playerOneCollisions方法的开头跟踪它们的值,并确保它们不是null。

如果它们是空的,那么这个问题就存在于这个类之外,并且您正在传递一个空值。

我还应该注意,我在主类中看不到设置tableground属性的任何地方,因此它们是空的,除非您没有向我们展示所有的代码。如果它们为空,那么这肯定会导致您正在经历的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18904301

复制
相关文章
让控件填满整个页面
一般用于左侧的Frame,比如左侧放了一个树控件。用<body onload="FillPage('FlyTreeView1')" scroll=no>调用即可。     <script language="javascript" type="text/javascript">       //将ctlid控件填充满当前的页面,多用于frame中       function FillPage(ctlid)       {         var obj=document.getElementById(ct
用户1075292
2018/01/23
9470
让ZeGraph在X方向上填满
默认的效果是 希望能够在x方向上填满,两边不留。尝试出来的方法是:用zg1.GraphPane.XAxis.Scale.Max 和Min来设置,而且必须在画完图后设置。 zg1.GraphPane.C
用户1075292
2018/01/23
4840
让ZeGraph在X方向上填满
wpf wrapPanel居中并从左到右排列
参考文章.net – WPF – 如何将WrapPanel中的所有项目居中? – Thinbug
全栈程序员站长
2022/09/15
3760
Lua游戏开发参考资料收集
List of game engines that use lua: 2D Agen (Lua; Windows) Blitwizard (Lua; Windows, Linux, Mac) Cocos2d-x (C++/Lua/JS; Windows, Linux, Mac; iOS/Android/BlackBerry) Corona (Lua; Windows, Mac; iOS/Android) EGSL (Pascal/Lua; Windows, Linux, Mac, Haiku) G
meteoric
2018/11/19
8820
Video里的poster填满窗口的方案
用Video播放视频,视频能自适应屏幕大小,但是它的Poster(海报封面)继承了原尺寸比例,无法自动缩放或拉伸,不得技巧的话,很难处理。
IT晴天
2018/08/20
2K0
VUE.DRAGGABLE实现从左到右拖拽功能
1、左边【一级、二级、三级】字样是不能拖拽的,【item1、item2…】可以拖拽
青梅煮码
2023/03/02
1.2K0
设置图片的透明度从左到右渐变
一、设置图片的透明度从左到右渐变 /** * 设置图片的透明度从左到右渐变,使右边缘平滑过渡(注意只跟着x坐标变) * * @param num 范围为0-100,0为全透明,100为不透明 */ public static Bitmap getTransAlphaBitmap(Bitmap sourceImg, float num) { if (sourceImg == null) { return null;
用户9854323
2022/06/25
1.8K0
Excel小技巧40:自动填满单元格
在Excel中,可以使用你已经输入到单元格中的数据填满整个单元格,并且会随着单元格尺寸的调整而自动填充,如下图1所示。
fanjy
2020/06/28
3K0
Excel小技巧40:自动填满单元格
15种手机游戏引擎和开发工具介绍
工欲善其事,必先利其器。对移动游戏开发者来说,高效实用的开发工具必不可少。近日,英国著名产业杂志《Develop》刊出了一篇文章,作者艾伦·李在文中推荐了15种移动游戏开发工具,从游戏引擎,到音效制作、推广等工具都有涉及。以下为原文主要内容编译。
全栈程序员站长
2022/08/31
3.3K0
15种手机游戏引擎和开发工具介绍
RPA 实战:让小姐姐填满你的硬盘(上)
首先打开另一个小网站 -- https://www.hwtelcloud.com/products/rpa,下载【设计器】,并进行使用激活;下载【执行器】,让程序自己动;此外还需下载浏览器驱动和安装浏览器插件。关于软件的下载安装等此处就不进行讲解,相信您能搞定!
胡琦
2021/09/09
2K1
7个最优秀的手机游戏引擎
随着智能手机成为主要的游戏平台,移动游戏引擎变得越来越流行。 下面将介绍7个最优秀的手机游戏引擎。
全栈程序员站长
2022/09/06
5.5K0
设计分享|基于单片机的从左到右流水灯
51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得51系列单片机为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
电子工程师成长日记
2022/08/09
1.1K0
设计分享|基于单片机的从左到右流水灯
设计分享|基于单片机的从左到右流水灯
51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
电子工程师成长日记
2022/12/14
8840
设计分享|基于单片机的从左到右流水灯
Platform SDK、Windows SDK简介
Platform SDK及Windows SDK是由微软公司出品的一个软件开发包,向在微软的Windows操作系统和.NET框架上开发软件和网站的程序员提供头文件、库文件、示例代码、开发文档和开发工具。
全栈程序员站长
2022/09/05
3.8K0
Java开发SDK详解->SDK开发
File ——》 Project Structure ——》 Project Settings ——》 Artifacts ——》 右栏左上角+ ——》JAR ——》 From Modules with dependencies——》OK
全栈程序员站长
2022/09/08
5.6K0
填满Github的绿色格子用我做的VSCode插件-Auto Commit
如果提交到其他分支,提交记录不会显示在绿色的格子里面,合并分支之后 才会显示在绿色格子里面。
OBKoro1
2020/10/27
1.4K0
填满Github的绿色格子用我做的VSCode插件-Auto Commit
SDK之我理解的SDK
这是SDK系列的倒数第二篇,其实应该是第一篇来着。最近发现写了两个月还没写完,进度有点慢,这几天抓紧时间写完。不过随即发现当时完全没想错,这部分还是最难写。先写一个成稿,后续想到更多的内容逐步补充和更新吧。 什么是SDK SDK即软件开发工具包(外语首字母缩写:SDK、外语全称:Software Development Kit)一般都是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。 ​上面这是百度百科对SDK的定义。但是现实中我们开发的SDK更多的是Seco
子勰
2018/05/22
2.7K0
[大家的项目] alipay_sdk_rust,Alipay sdk in rust 支付宝支付 SDK
alipay官方没有rust sdk,本人自己实现了一个,已经生产环境可用。基于gostd的http模块。
MikeLoveRust
2022/11/28
1.7K0
[大家的项目] alipay_sdk_rust,Alipay sdk in rust 支付宝支付 SDK
教你如何填满过去一年的Github的绿色格子-Auto Commit
如果提交到其他分支,提交记录不会显示在绿色的格子里面,合并分支之后 才会显示在绿色格子里面。
OBKoro1
2020/01/13
3.6K0
点击加载更多

相似问题

corona sdk scrollableView

12

Corona SDK旋转

11

Corona sdk + xmpp

12

ScreenShot (CORONA SDK)

22

Corona SDK SplashScreen

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文