Flash - 使用多个事件处理程序?

     2023-02-18     217

关键词:

【中文标题】Flash - 使用多个事件处理程序?【英文标题】:Flash - using multiple event handlers? 【发布时间】:2012-10-31 03:14:28 【问题描述】:

所以我正在开发一个使用多个 .as 文件的游戏 - 我正在尝试对游戏进行编程,但是当它到达 theGame.as 中的第 21 行时,它会不断出现以下错误 - 错误是.. .

TypeError: Error #2007: Parameter child must be non-null. at flash.display::DisplayObjectContainer/addChild() at theGame()[M:\Users\----\Documents\Programming For Fun\Flash\Tutorial - Menu System\theGame.as:21] at main/changeState()[M:\Users\----\Documents\Programming For Fun\Flash\Tutorial - Menu System\main.as:23] at mainMenu/brnP_Button()[M:\Users\----\Documents\Programming For Fun\Flash\Tutorial - Menu System\mainMenu.as:40] Cannot display source code at this location.

我正在使用以下 .as 文件。

main.as

//main.as
package

import flash.display.*;
import flash.system.fscommand;

public class main extends MovieClip

    public function main()
    
        changeState(null, "menu");
    
    public function changeState (currentState, nextState)
    
        if (currentState != null)
        
            removeChild(currentState);
        
        switch(nextState)
        
            case "menu": var mm:mainMenu = new mainMenu(changeState); 
                         addChild(mm);
            break;
            case "game": var g:theGame = new theGame(changeState);
                         addChild(g);
            break;
            case "exit": fscommand("quit");
            break;
        
    




mainMenu.as `

//mainMenu.as
package

import flash.display.*;
import flash.events.*;

public class mainMenu extends MovieClip

    var theCallBackFunction:Function;

    private var ballX:Number = 10; // Declaring a variable known as ballX
    private var ballY:Number = 0; // Declaring a variable knwon as ballY
    private const GRAVITY:Number = 2; // Declaring a const variable known as gravity
    public const ROTATION:Number = 1;
    public const BOUNCE:Number = 0.9;
    var gameBall:Ball = new Ball();

    public function mainMenu(callBack)
    
        addEventListener(Event.ENTER_FRAME, menuFrameHandler);
        addChild(gameBall);

        var btnPlay:mmPlay = new mmPlay();
        btnPlay.addEventListener(MouseEvent.MOUSE_DOWN, brnP_Button);
        btnPlay.x = width/2;
        btnPlay.y = height/2 - btnPlay.height/2;
        addChild(btnPlay);

        var btnExit:mmExit = new mmExit();
        btnExit.addEventListener(MouseEvent.MOUSE_DOWN, brnE_Button);
        btnExit.x = width/2;
        btnExit.y = height/2 - btnExit.height/2;
        btnExit.y += btnExit.height + 4;
        addChild(btnExit);

        theCallBackFunction = callBack;
    
    public function brnP_Button(e:MouseEvent)
    
        removeEventListener(Event.ENTER_FRAME, menuFrameHandler);
        theCallBackFunction(this, "game");
        return;
    

    public function brnE_Button(e:MouseEvent)
    
        theCallBackFunction(this, "exit");
        return;
    

    private function menuFrameHandler (e:Event):void
    
        // Gravitate the Ball
        ballY += GRAVITY; // The ball is effected by gravity each frame

        // Move The Ball
        gameBall.x += ballX;
        gameBall.y += ballY;
        gameBall.rotation += ROTATION * ballX;
        checkBoundaryCollision();
    

    private function checkBoundaryCollision():void
    
        var left:Number;
        var right:Number;
        var bottom:Number;

        left = gameBall.x - (gameBall.width / 2);
        right = gameBall.x + (gameBall.width / 2);
        bottom = gameBall.y;

        if (left < 0 && ballX < 0)
        
            gameBall.x = (gameBall.width / 2)
            ballX  *= -1;
        
        else if (right > stage.stageWidth && ballX > 0)
        
            gameBall.x = stage.stageWidth - (gameBall.width / 2)
            ballX  *= -1;
        

        else if (bottom > stage.stageHeight && ballY > 0)
        
            gameBall.y = stage.stageHeight - (gameBall.height/2)
            ballY *= -BOUNCE;
        
    



theGame.as

//theGame.as
package

import flash.display.MovieClip
import flash.text.TextField
import flash.events.Event
import flash.events.MouseEvent

public class theGame extends MovieClip

    public const GRAVITY:Number = 2; // Declaring a const variable known as gravity
    public const BOUNCE:Number = 0.8;
    public const HIT:Number = 15;
    public const ROTATION:Number = 1;
    public var gameBall:Ball;

    private var ballX:Number; // Declaring a variable known as ballX
    private var ballY:Number; // Declaring a variable knwon as ballY

    public function theGame(callBack): void
    
        addChild(gameBall);
        ballX = Math.random(); // Initalising ballX
        ballY = Math.random(); // Initalising ballY

        gameBall.buttonMode = true;

        addEventListener(Event.ENTER_FRAME, gameFrameHandler);
        addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
    

    private function gameFrameHandler (e:Event):void
    
        // Gravitate the Ball
        ballY += GRAVITY; // The ball is effected by gravity each frame

        // Move The Ball
        gameBall.x += ballX;
        gameBall.y += ballY;
        gameBall.rotation += ROTATION * ballX;

        // Check Stage Boundaries For Collisions
        checkBoundaryCollision();
    

    private function mouseDownHandler (e:MouseEvent):void
    
        // Hit the ball if it has been clicked
        if (e.target == gameBall)
        
            hit(e.target.mouseX, e.target.mouseY);
        
    

    private function checkBoundaryCollision():void
    
        var left:Number;
        var right:Number;
        var bottom:Number;
        var top:Number;

        left = gameBall.x - (gameBall.width / 2);
        right = gameBall.x + (gameBall.width / 2);
        bottom = gameBall.y + (gameBall.height / 2);
        top = gameBall.y - (gameBall.height / 2);

        if (left < 0 && ballX < 0)
        
            gameBall.x = (gameBall.width / 2)
            ballX  *= -1;
        
        else if (right > stage.stageWidth && ballX > 0)
        
            gameBall.x = stage.stageWidth - (gameBall.width / 2)
            ballX  *= -1;
        

        if (top < 42.70 && ballY < 0)
        
            gameBall.y = 42.70 + (gameBall.height / 2)
            ballY  *= -1;
        
        else if (bottom > stage.stageHeight && ballY >= 0)
        
            gameBall.y = stage.stageHeight - (gameBall.height/2)
            ballY *= -BOUNCE;
            ballX *= BOUNCE;
        
    

    private function hit(hitX:Number, hitY:Number):void
    
        // Adjust vertical velocity
        if (ballY > 0)
        
            ballY *= -BOUNCE / 2;
        

        ballY -= HIT;

        //adjust horizontal veloity
        if (ballX * hitX > 0)
        
            ballX *= -BOUNCE;
        

        ballX -= (hitX / gameBall.width * HIT);
    


我将如何解决这个问题?

【问题讨论】:

【参考方案1】:

theGame 类中没有gameBall 的实例。

尝试添加

    gameBall = new Ball();

之前

    addChild(gameBall);

【讨论】:

使用单个事件处理程序 asp.net 从网格中处理多个删除事件

】使用单个事件处理程序asp.net从网格中处理多个删除事件【英文标题】:Handlemultipledeleteeventsfromgridwithsingleeventshandlersasp.net【发布时间】:2016-05-2306:04:21【问题描述】:我有两个包含删除按钮的网格,我正在使用RadAjaxManager,它... 查看详情

使用单个事件处理程序更改多个文本框值

】使用单个事件处理程序更改多个文本框值【英文标题】:Usingsingleeventhandlerforchangingmultipletextboxvalues【发布时间】:2018-12-0315:52:32【问题描述】:home.jsx文件importReact,Componentfrom\'react\';//import\'react-dropdown/style.css\';importSelect,Input,Bu... 查看详情

Websockets 在客户端发送多个事件和多个事件处理程序

...【发布时间】:2020-10-0507:03:56【问题描述】:最近我开始使用WebSockets进行服务器-客户端通信。问题是当我想在连接中发送多种类型的数据时。有没有办法在单个连接中从服务器端向客户端发送多个消息事件并在客户端分别处理 查看详情

具有多个事件处理程序的 JQuery .on() 方法到一个选择器

...何将Jquery.on()方法与具有多个关联事件的特定选择器一起使用。我以前使用.live()方法,但不太确定如何使用.on()来完成相同的壮举。请参阅下面的代码:$("tabl 查看详情

将多个参数传递给 React 中的事件处理程序

...时间】:2017-08-2614:09:46【问题描述】:所以我试图让react使用ES6语法。在ES5中,我有setInitialState没有使用函数绑定语法的构造函数。我有一个任意价格列表,我希望在输入元素更改时更改状态。但正确的价格必须改变。我什至不... 查看详情

使用jquery在单个元素上不引人注目的多个事件处理程序

/*Exampleofinlineeventhandlers:<inputtype="text"name="date"onchange="validateDate()"/> Thisisbad.Thepurposeofmarkupistodescribeadocument'sstructure,notitsprogr 查看详情

如何使用单个处理程序处理多个 TextInput?

】如何使用单个处理程序处理多个TextInput?【英文标题】:HowtomultipleTextInputhandlewithsinglehandler?【发布时间】:2018-02-2308:36:24【问题描述】:我已经为TextInput创建了公共类并多次使用它,但它的事件句柄使用相同的方法。我想在te... 查看详情

为html元素添加多个事件处理程序

...html和js的代码杂糅,耦合度高,修改不方便 方法二:使用JavaScript的DOM编程,获取元素节点,然后绑定事件<buttonid="btn">按钮</button 查看详情

通过循环将 TouchUpInside 事件分配给多个 UIImageView,并使用可以进一步动画/操作每个 UIImageView 的处理程序方法

】通过循环将TouchUpInside事件分配给多个UIImageView,并使用可以进一步动画/操作每个UIImageView的处理程序方法【英文标题】:AssignaTouchUpInsideeventtoseveralUIImageViewsviaaloop,withahandlermethodthatcanfurtheranimate/manipulateeachUIImageView【发布时间】... 查看详情

如何在 Shiny eventReactive 处理程序中侦听多个事件表达式

...两个不同的事件来触发我的应用程序中各种绘图/输出所使用的数据的更新。一个是正​​在单击的按钮(input$spec_button),另一个是 查看详情

javascript多个事件处理程序(代码片段)

查看详情

事件处理程序(代码片段)

总结:1.HTML事件处理程序不允许使用未转义字符,event变量访问事件对象,this指向目标元素本身,建议使用try/catch语句避免浏览器报错,但并不推荐使用HTML事件处理程序。2.DOM0级事件处理程序中this指向目标元素本身,赋值null删... 查看详情

多个控件的事件处理程序 vb.net

】多个控件的事件处理程序vb.net【英文标题】:eventhandlerformultiplecontrolsvb.net【发布时间】:2011-07-0612:36:05【问题描述】:我正在尝试为表单上的某些控件捕获特定事件。我试过这个,但它没有触发事件ForEachctrlAsControlInpnlGeneral.Co... 查看详情

如何向javafx选项卡添加多个选项卡关闭事件处理程序?(代码片段)

...一个事件处理程序时,这很有效。我还没有实现的是添加多个事件处理程序,因为第二次调用setOnClosed会“覆盖”第一次调用时设置的事件处理程序。在下面的代码示例中,仅在tabclose上执行doSomethingIsExecuted,但我希望执行所有... 查看详情

jQuery:表单提交 - 多个事件处理程序

】jQuery:表单提交-多个事件处理程序【英文标题】:jQuery:FormSubmission-MultipleEventHandlers【发布时间】:2020-03-0113:39:35【问题描述】:目前我的项目中的jQuery表单提交存在一些问题。我的项目包含一个通用jQuery代码,可防止表单重... 查看详情

如何使用 Angular 指令处理单个 HTML 元素上的多个触摸事件

】如何使用Angular指令处理单个HTML元素上的多个触摸事件【英文标题】:HowtohandlemultipletoucheventsonasingleHTMLelementusingAngulardirectives【发布时间】:2013-02-1802:08:44【问题描述】:在我的移动应用程序中,我在主视图中以HTML格式显示内... 查看详情

如何在没有单独的单击事件处理程序的情况下处理多个表单提交 [关闭]

】如何在没有单独的单击事件处理程序的情况下处理多个表单提交[关闭]【英文标题】:Howtohandlemultipleformsubmitswithoutindividualclickeventhandlers[closed]【发布时间】:2018-05-0611:39:41【问题描述】:我的mvc应用程序中有两个表单,所有表... 查看详情

如何将事件处理程序添加到呈现多个结果的子组件?

】如何将事件处理程序添加到呈现多个结果的子组件?【英文标题】:Howtoaddeventhandlertoachildcomponentthatrendersmultipleresults?【发布时间】:2019-06-0614:53:35【问题描述】:ParentcomponentChildComponent我正在尝试实现以下功能:我有一个父按... 查看详情