OnKeyDown函数无法响应键盘

Researcher 2006-09-27 09:04:35
我做了以下3个工作,但键盘还是无法控制,
我测试了一下OnKeyDown()函数根本进都没进去
请问是什么问题?

1.我在.h里面加上
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
2.我在.cpp里面加上ON_WM_KEYDOWN()
BEGIN_MESSAGE_MAP(COpenGL, CWnd)
//{{AFX_MSG_MAP(COpenGL)
ON_WM_CREATE()
ON_WM_PAINT()
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

3.在.cpp里面加上
void COpenGL::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{ // TODO: Add your message handler code here and/or call default
CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
switch(nChar)
{ case 'A': //a模式转换
line=!line;
break;
case 0x42: //b正向旋转
t++;
break;
case 0x43: //c反向旋转
t--;
break;
case 0x53: //s停止旋转
t=0;
break;
case 0x46: //f远离并缩小
size--;
break;
case 0x44: //d靠近并放大
size++;
break;
default:
break;
}

}
...全文
658 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Researcher 2006-09-27
  • 打赏
  • 举报
回复
非要增加SetFocus();才能响应键盘,但是这样又无法响应对话框里的按钮实践了,怎么解决?
BOOL COpenGL::PreTranslateMessage(MSG *pMsg)
{ SetFocus();
switch(pMsg->message)
{ case WM_KEYDOWN://Windows键盘响应
//exit(0);
switch(pMsg->wParam)
{ case 'A': //a模式转换
line=!line;
break;
case 0x42: //b正向旋转
t++;
break;
case 0x43: //c反向旋转
t--;
break;
case 0x53: //s停止旋转
t=0;
break;
case 0x46: //f远离并缩小
size--;
break;
case 0x44: //d靠近并放大
size++;
break;
}
break;
default:
break;
}
return CWnd::PreTranslateMessage(pMsg);
}
折腾_苏州 2006-09-27
  • 打赏
  • 举报
回复
用你COpenGL父类的 ::PreTranslateMessage(pMsg);
Researcher 2006-09-27
  • 打赏
  • 举报
回复
CDialog::PreTranslateMessage(pMsg);编译出错怎么办?

D:\Prog\__VR_Model\MFCPoints11\OpenGL.cpp(224) : error C2352: 'CDialog::PreTranslateMessage' : illegal call of non-static member function
c:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(2626) : see declaration of 'PreTranslateMessage'
ChinaCup 2006-09-27
  • 打赏
  • 举报
回复

关于 为什么映射WM_KEYDOWN消息没有作用 ??

那是 问题在对话框程序里,PretranslateMessage中的一个PretranslateInput的函数里的 IsDialogMessage。并使用IsDialogMessage
// filter both messages to dialog and from children, 比如所需要的WM_KEYDOWN.目的
把VK_LEFT等拦截了用于tab的切换

你可以去看看MFC的源代码,找这个函数:
CDialog::PretranslateMessage 深入跟踪,

SDI/MDI没这个问题了
zhucde 2006-09-27
  • 打赏
  • 举报
回复
BOOL CRender::PreTranslateMessage(MSG* pMsg)
{

if(pMsg->message == WM_KEYDOWN)
{
if(pMsg->wParam=='A')
MessageBox("A");

}

return CDialog::PreTranslateMessage(pMsg);
}
用PreTranslateMessage是要以响应的,为何映射没有用,说不清楚,MSDN没查到解释,希望有人解释一下,
让界面获得焦点可以
this->SetFocus();
this->SetForegroundWindow();
Researcher 2006-09-27
  • 打赏
  • 举报
回复
还是没有用,请问怎样让界面获得焦点?
Researcher 2006-09-27
  • 打赏
  • 举报
回复
PreTranslateMessage
的返回值是true 还是 false?
littlepboy 2006-09-27
  • 打赏
  • 举报
回复
此界面没有获得焦点?
其他的也想不到了。
zhucde 2006-09-27
  • 打赏
  • 举报
回复
谁解释一下楼主的题目 , 为什么映射WM_KEYDOWN消息没有作用?
ChinaCup 2006-09-27
  • 打赏
  • 举报
回复
BOOL C****Dlg::PreTranslateMessage(MSG *pMsg)
{
if (pMsg->message == WM_KEYDOWN )
{
switch(pMsg->wParam)
{ case 'A': //a模式转换
line=!line;
break;
case 0x42: //b正向旋转
t++;
break;
case 0x43: //c反向旋转
t--;
break;
case 0x53: //s停止旋转
t=0;
break;
case 0x46: //f远离并缩小
size--;
break;
case 0x44: //d靠近并放大
size++;
break;
default:
break;
}


}


}
ChinaCup 2006-09-27
  • 打赏
  • 举报
回复
1. .h里virtual BOOL PreTranslateMessage(MSG *pMsg);
2. .cpp里
BOOL C****Dlg::PreTranslateMessage(MSG *pMsg)
{


}
Researcher 2006-09-27
  • 打赏
  • 举报
回复
PreTranslateMessage
代码应该怎么写?
能不能贴个简单例子示意?
ChinaCup 2006-09-27
  • 打赏
  • 举报
回复
是的,在PreTranslateMessage处理
if (pMsg->message == WM_KEYDOWN

littlepboy 2006-09-27
  • 打赏
  • 举报
回复
根据你的描述,可以推测你的OnKeyDown所在界面与按钮所在的界面不是一个窗口,否则不会一个SetFocus,另一个窗口便失去焦点了。

假设你要处理KeyDown的窗口为A,按钮所在窗口为B,可以这样:
在A里处理的你的OnKeyDown,这个不变
void A:OnKeyDown()
{
// 你的代码....
}
在B里PreTranslateMessage里截获KeyDown消息,并返回给A:
BOOL B::PreTranslateMessage()
{
if (pMsg->message == WM_KEYDOWN)
{
return A::PreTranslateMessage(pMsg);
}
}

这样无论焦点在哪个窗口都会响应你键盘,也不存在失去焦点等问题。
1.引言 几乎所有的Web项目开发都需要客户端验证,尤其是JavaScript的使用,JS结合Html和CSS占据了网页展现市场,不管采用什么技术我们在网页看到的东西最终生成都是这些代码所表示含义。 Web应用如此广泛,其中客户端与服务端交互时所消耗的资源及响应时间,频繁的刷新页面使得人机交互体验极为不好,而对每个页面使用客户端处理技术无疑又加大项目开发周期,脚本调试及修改维护的工作量将占用大量的开发时间,验证控件须对每个控件的元素进行设置且会对页面整体的布局带来影响,占据着页面布局空间的位置,综合考虑及项目整体风格的统一等多种因素中,总得有个折中的考虑。ChkInputs.js应运而生,使用它不需要编写多少代码,只需对验证元素简单配置一下即可,使用方便,也不会影响页面的布局,并可以精确判断客户端输入框的长度、必填、数据类型(整数型、浮点型、字母型、数字字母混合型)和下拉框等,及对需要验证的控件分组验证等。同时提供许多常用的公共函数如类似C#中Trim()方法等。 使用ChkInputs.js,会将光标定位到验证不通过的控件上,若控件上有文本同时将其文本选中高亮度显示,不会刷新页面,只有当所有验证通过时才会将结果提交到后台处理,可以使用鼠标或纯键盘及相结合的方式来操作。 2.ChkInputs.js的使用: ChkInputs.js的使用极为方便,你可以直接将自定义属性像这样添加在Web页面, 也可以在后台代码里这样添加,如在.net下.aspx.cs代码里这样写: this.TextBox1.Attributes.Add("chinese", "测试输入框");//控件名称 this.TextBox1.Attributes.Add("maxsize", "6");//控件接受的字符长度大小 this.TextBox1.Attributes.Add("nullable", "no");//不可为空,默认可为空 this.TextBox1.Attributes.Add("datatype", "number");//控件数据类型 两者代码是一样的,不过一般在后台代码(.cs)写好写,因为这样写有利于项目的维护修改。当页面的控件元素都设置好时,客户端代码通常只需这样写即可: 首先在页面head区域内定义一个这样的JS函数 <script language="javascript"> //例一,全部验证,比较常用,基本满足一般所有的验证功能 function CheckInfoAll() { return verifyAll(document.getElementById("form1")); } keydown="if(event.keyCode == 13){rerurn CheckAll();}" 后面的各种使用根据你的偏好选择使用。 除此之外,还可以指定验证及分组验证。指定验证如: return verifyInput(document.getElementById("TextBox1")); 分组验证同一个页面的元素最多可分六组(够用的了),各组之间互不影响,示例代码如下: //验证页面所属组group1="group1"的元素 function CheckAllGroup1() { return verifyAllByGroup1(document.getElementById("form1"),"group1") } 其它更多的使用详细代码可见附件示例代码所示。 3.ChkInputs的结构及原理: 这里先简要介绍一下文档对象模型(DOM)与树状结构,DOM可以让HTML元素与其属性,利用JS程序来控制。有两种方法将JS程序用于文档的元素:通过元素的名称和通过树状结构。这两个方法并非独立的,可能同时存在于相同的脚步中。 基本上对象是可以用脚步控制,或者可编程元素,拥有属性(Property)、事件(Event)以及方法(Method)。JS把所有网页元素、屏幕上可见的画面区域,以及浏览器的窗口都当成可编程的对象。所以,只要通过程序,你就可以控制这些对象的属性,执行其方法,以及捕捉这些事件等。 对象都有属性,有的属性就是对象本身。试想将人体当成对象,如果以分级的方式来看,人体对象有个躯干属性,而躯干有个心脏属性,心脏里还有心室属性。这些身体的零件都属于属性,而且全部都与人体对象之间有逻辑化的层次关系。 同样地,任何JavaScript这类面向对象程序语言的元素,也都是对象。这些对象都通过分级系统,作为主体的一部分。举例来说,浏览器窗口是一个对象,包含了几个文档对象,这些对象进而形成其他对象,依此类推,这个分级会变得很长。 由于面向对象的本质,JavaScript允许对象、对象的属性以及其事件都通过脚本来控制。也因为大部分网页浏览器都支持JavaScript,所以它是网页设计时最适合的客户端语言。ChkInputs.js就是通过JavaScript并结合DOM对象的自定义的属性而编写的。当使用时,ChkInputs.js会自动遍历DOM的元素,逐个检测直到所以验证完毕为止,由于事件触发在客户端响应非常及时,不会刷新页面。 该函数库提供许多函数库,就不一一列举了,这里举几个代表性的函数例子加以解释说明,先介绍一个频率用的最多的函数,如函数verifyAll,定义如下: function verifyAll(myform) {…………..} 参数myform指代验证的表单,可以比作验证树DOM的根,之后的JavaScript会遍历所有元素(elements),逐个检验,若没有设置验证则直接跳过,若有一个验证不通过,都不会将表单提交,并将光标定位到该处(focus()),若有文本同时高亮度选中该文本(select())。同样其他函数的原理也是类似。 另外,其他函数如数据长度的验证,是验证内容的实际字节的长度,即汉字两个字节英文及数字两个字节,判断依据ASCII值,计算机在设计字符存储的时候就是超过一个字节的ASCII字符都是以两个字节存放的。同时JavaScript提供了Scripting. FileSystemObject对象,GetFileSize(…)可直接取得待上传文件的字节大小,但也有限制就是客户端浏览须启用ActiveX插件,若没有启用时,会提示用户按步骤设置。CancelClientEvent()是使用事件冒泡阻止了事件的继续执行,同时设置返回值,最终成功阻止事件的继续往后执行,当在客户端触发一要回发的按钮事件是,想在程序里结束让其继续执行时,以往则不是很好处理,如Enter键,这里此方法则大显用武之地。 附有ChkInputs.js完整的源代码及实例代码。
private var backSound:Sound = new Back_Sound ; //实例化声音开关对象 private var sound_MC:Sound_MC=new Sound_MC(); //创建一个标识变量,该变量用于标记背景音乐是否在播放,初始状态为播放 private var soundON:Boolean = true; //创建一个Soundchannel对象 private var channel:SoundChannel; //创建一个影片剪辑对象,该对象作为容器用于放置游戏中循环运动的背景 var Map:MovieClip = new MovieClip(); //实例化游戏结束信息影片剪辑 var gameover_MC:game_Over=new game_Over();; //实例化返回按钮 var Back_Btn:back_btn=new back_btn() public function Game():void { //定义舞台的帧频 stage.frameRate = 35; //使舞台可以最大化 stage.scaleMode = StageScaleMode.EXACT_FIT; //侦听开始游戏按钮的单击事件,调用playGame()函数开始游戏 Play_Btn.addEventListener(MouseEvent.CLICK,playGame); //侦听游戏介绍按钮的单击事件,调用GameIntro()函数弹出游戏介绍界面; Help_Btn.addEventListener(MouseEvent.CLICK,GameIntro); //播放背景音乐,使背景音乐循环播放 channel = backSound.play(0,100000); } //创建【帮助】按钮鼠标单击事件响应函数 private function GameIntro(e:MouseEvent){ //使开始界面影片剪辑跳转到第二帧显示帮助信息内容 Start_MC.gotoAndStop(2); //使舞台上的【开始】按钮和【帮助】按钮不可见 Play_Btn.visible=false; Help_Btn.visible=false; //为影片剪辑中的【back】按钮添加鼠标单击事件侦听器 Start_MC.Back_Btn.addEventListener(MouseEvent.CLICK ,toStart) ; } //创建【back】按钮鼠标单击事件响应函数 private function toStart(e:MouseEvent ){ //移除【back】按钮的事件侦听器 Start_MC.Back_Btn.removeEventListener(MouseEvent.CLICK ,toStart); //使舞台上的【开始】按钮和【帮助】按钮可见 Play_Btn.visible=true; Help_Btn.visible=true; //开始界面影片剪辑跳回到第一帧 Start_MC.gotoAndStop(1); } private function playGame(event:MouseEvent):void { //隐藏开场界面 hideStartScene(); //调用函数加载背景图并使其循环滚动 loadMap(); //调用函数加载记分器 loadScore(); //loadTime(); //加载计时器 //调用函数加载主角 loadRole(); //调用函数加载敌人 loadEnemy(); //调用函数放置显示生命值的影片剪辑 loadLife(); //调用函数使背景音乐控制按钮显示 loadSoundMC(); } //创建函数移除开始界面中的各个元素 private function hideStartScene():void { //移除开始界面影片剪辑 removeChild(Start_MC); //隐藏【开始】按钮和【帮助】按钮 removeChild(Play_Btn); removeChild(Help_Btn); } //在舞台上放置游戏背景 private function loadMap():void { //实例化天空背景对象 var backG:bg=new bg(); //实例化地面对象 var Land:land = new land(); //设置地面的位置 Land.y = stage.stageHeight - Land.height / 2; //使天空背景显示 Map.addChild(backG); //实例化第一个游戏背景图 var Map_1:map_1 = new map_1(); //将第一个游戏背景图添加到容器中 Map.addChild(Map_1); //为第一个游戏背景图影片剪辑添加帧频事件侦听器 Map_1.addEventListener(Event.ENTER_FRAME,moveMap); //实例化第二个游戏背景图 var Map_2:map_2= new map_2(); //设置第二个背景图的初始位置 Map_2.x = Map_1.width; //将第二个游戏背景图添加到容器中 Map.addChild(Map_2); //将地面图添加到容器中 Map.addChild(Land); //为第二个游戏背景图添加帧频事件侦听器 Map_2.addEventListener(Event.ENTER_FRAME,moveMap); //使容器显示于舞台的底层 stage.addChildAt(Map,0); } //使背景循环移动 private function moveMap(event:Event):void { var mc:MovieClip = event.target as MovieClip; //使背景图向左移动 mc.x -= 2; //判断背景图是否离开舞台 if (mc.x<=-(mc.width)) { //重新定义背景图的位置,使其与上一张图斜接。这里要注意,衔接位置应该在舞台外,否则会出现明显的停顿现象 mc.x=stage.stageWidth+30 ; } } //在舞台上放置记分器 private function loadScore():void { //初始化分数值变量 Score=0 //实例化记分器对象 Score_MC = new score(); //设置记分器对象的位置 Score_MC.x = 100; Score_MC.y = stage.stageHeight - 25; //将记分器放置到舞台 stage.addChild(Score_MC); //设置记分器显示的初始值 Score_MC.Score_Text.text = "0"; } //在舞台上放置生命值影片剪辑 private function loadLife():void { //对象实例化 Life_MC= new life(); //设置记分器对象的位置 Life_MC.x = 250; Life_MC.y = stage.stageHeight - 25; //将记分器放置到舞台 stage.addChild( Life_MC); } //在舞台上放置声音控制按钮 private function loadSoundMC():void { //设置对象在舞台上的放置位置 sound_MC.x = 520; sound_MC.y = stage.stageHeight - 25; //使对象处于按钮模式 sound_MC.buttonMode = true; //将对象放置到舞台 stage.addChild(sound_MC); //为对象添加鼠标单击事件侦听器 sound_MC.addEventListener(MouseEvent.CLICK ,controlSound); } //加载敌人 private function loadEnemy():void { //指定敌人出现的时间间隔 var delay:uint = 3000; //无限次循环 var repeat:uint = 0; //创建时间对象 enemyTimer = new Timer(delay,repeat); //并添加事件侦听器侦听时间对象的时间事件使敌人显示 enemyTimer.addEventListener(TimerEvent.TIMER,showEnemy); //启动计时器; enemyTimer.start(); } //使敌人以一定的时间间隔随机出现 private function showEnemy(e:TimerEvent):void { //随机生成数字1或2 var i:int = Math.round(Math.random() * 1 + 1); //如果生成的是1 if (i==1) { //实例化第一个敌人对象 Enemy = new enemy_1(); } else { //实例化第二个敌人对象 Enemy = new enemy_2(); } //设置敌人在舞台上的位置 Enemy.x = 630; Enemy.y = Math.round(Math.random()*(stage.stageHeight)-100); //如果垂直方向位置过高,使其位于指定的位置 if (Enemy.y < 10) { Enemy.y = 30; } //为敌人对象添加帧频事件侦听器使其能够运动 Enemy.addEventListener(Event.ENTER_FRAME,enemyLeft); //将敌人置于容器中 Enemys.addChild(Enemy); //将容器置于舞台上; stage.addChildAt(Enemys,1); } //创建帧频事件响应函数使敌人左移 private function enemyLeft(m:Event):void { //实例化事件目标对象 var mc:MovieClip = m.target as MovieClip; //使对象左移 mc.x -= 5; //如果对象移出舞台 if (mc.x <= -50) { //移除事件侦听器 mc.removeEventListener(Event.ENTER_FRAME,enemyLeft); //如果容器中有对象 if(Enemys.contains(mc) ) {//将对象从容器中移除 Enemys.removeChild(mc); } } } //加载游戏主角 private function loadRole():void { //变量初始化 bool=true; //实例化主角 Role = new role(); //设置主角位置 Role.x = 150; Role.y = 200; //使影片剪辑从第一帧开始播放 Role.gotoAndPlay(1); //将主角放置到舞台上 stage.addChildAt(Role,1); //创建一个新对象 key = new Object(); //为舞台添加键盘按下键事件侦听器 stage.addEventListener(KeyboardEvent.KEY_DOWN,onkeyDown); //为舞台添加键盘按键释放事件侦听器 stage.addEventListener(KeyboardEvent.KEY_UP,onkeyUp); //为舞台添加帧频事件侦听器 stage.addEventListener(Event.ENTER_FRAME,roleMove); } //键盘键按下事件响应函数 private function onkeyDown(event:KeyboardEvent):void { //设置被按下的键为真 key[event.keyCode] = true; } //键盘按键释放事件响应函数 private function onkeyUp(event:KeyboardEvent):void { //删除key对象 delete key[event.keyCode]; //设置变量值 bool = true; //主角恢复到水平飞行状态 Role.gotoAndStop(13); } //舞台帧频事件响应函数 private function roleMove(event:Event):void { //如果按下的是左箭头键 if (key[Key_LEFT]) {//如果主角没有从左侧飞出舞台 if (Role.x > 20) { //主角向左移动 Role.x -= speed; } } //如果按下的是上箭头键 if (key[Key_UP]) { //如果主角没有从上方飞出舞台 if (Role.y > 20) { //主角向上移动 Role.y -= speed; //播放主角飞行动画 Role.gotoAndPlay(14); } } //如果按下右箭头键 if (key[Key_RIGHT]) { //如果主角没有从右侧飞出舞台 if (Role.x < stage.stageWidth) { //主角向右移动 Role.x += speed; } } //如果按下下箭头键 if (key[Key_DOWN]) {//如果主角位于指定范围内 if (Role.y < stage.stageHeight - 80) { //主角下移 Role.y += speed; //播放飞行动画 Role.gotoAndPlay(2); } } //如果按下空格键 if (key[Key_Space]) { //如果变量值为true if (bool==true) { //实例化炮弹对象 Bullet = new bullet(); //定义炮弹的位置,使其与主角相同 Bullet.x = Role.x; Bullet.y = Role.y; //播放射击声 bulletSound.play(); //为炮弹对象添加帧频事件侦听器; Bullet.addEventListener(Event.ENTER_FRAME,bulletMove); //将炮弹对象置于炮弹容器中 Bullets.addChild(Bullet); //将炮弹容器置于舞台上 stage.addChildAt(Bullets,1); //设置变量值 bool = false; } } //如果有敌人 if (Enemy) { //遍历所有的敌人 for (var i:int=0; i函数移除游戏元素和相关事件侦听器 gameover(); } } //炮弹实例帧频事件响应函数,该函数使炮弹右移 private function bulletMove(event:Event):void { //实例化事件目标对象,即炮弹对象 var mc:MovieClip = event.target as MovieClip; //炮弹右移 mc.x += 15; //如果炮弹飞离舞台 if (mc.x >= stage.stageWidth) { //移除事件侦听器使其不再右移 mc.removeEventListener(Event.ENTER_FRAME,bulletMove); //如果容器中有对象 if(Bullets.contains(mc) ) { //将对象从容器中移除 Bullets.removeChild(mc); } } //如果敌人出现 if (Enemy) { //获取敌人个数 var num:int = Enemys.numChildren; //遍历所有敌人 for (var i:int = 0; i100) { //向舞台添加游戏结束信息影片剪辑 stage.addChild(gameover_MC); //跳转到指定的帧显示胜利信息 gameover_MC.gotoAndStop(1); //显示玩家得分 gameover_MC.result_txt.text = Score.toString(); //调用函数移除游戏元素和相关事件侦听器 gameover(); } } //控制背景声音的播放 private function controlSound(s:MouseEvent ) { //如果背景声音正在播放 if (soundON==true) { //变量值设置为false soundON = false; //声音控制影片剪辑跳到第二帧显示静音标志 sound_MC.gotoAndStop(2); //停止声音播放; channel.stop(); } else { //如果背景声音没有播放,变量值设置为true soundON = true; //声音控制影片剪辑跳到第一帧取消静音标志的显示 sound_MC.gotoAndPlay(1); //背景声音开始循环播放; backSound.play(0,1000000); } } //移除游戏各个元素和事件侦听器 private function gameover():void { //指定【back】按钮的位置 Back_Btn.x=500; Back_Btn.y=300; //在舞台上放置【back】按钮 stage.addChild (Back_Btn); //为按钮添加鼠标单击事件侦听器 Back_Btn.addEventListener(MouseEvent.CLICK ,goBack); //移除游戏中各个对象的事件侦听器 stage.removeEventListener(KeyboardEvent.KEY_DOWN,onkeyDown); stage.removeEventListener(KeyboardEvent.KEY_UP,onkeyUp); stage.removeEventListener(Event.ENTER_FRAME,roleMove); sound_MC.removeEventListener(MouseEvent.CLICK ,controlSound); Enemy.removeEventListener(Event.ENTER_FRAME,enemyLeft); //当敌人容器中的子对象不为0 while(Enemys.numChildren!=0){ //将容器最底层的对象删除 Enemys.removeChildAt(0); } //从舞台上移除游戏对象 stage.removeChild (Map); stage.removeChild(Enemys); stage.removeChild(Role); stage.removeChild (Score_MC); stage.removeChild (Life_MC); stage.removeChild (sound_MC); } //创建【back】按钮的鼠标单击事件响应函数 private function goBack(e:MouseEvent ){ //从舞台上移除结束信息影片剪辑 stage.removeChild(gameover_MC); //移除【back】按钮的事件侦听器 Back_Btn.removeEventListener(MouseEvent.CLICK ,goBack); //移除舞台上的【back】按钮 stage.removeChild (Back_Btn); //调用函数加载对象重新开始游戏 loadMap(); loadScore(); loadRole(); loadEnemy(); loadLife(); loadSoundMC(); } } }

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧