收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 1730|回复: 20

[AS1&2] 做游戏遇问题求助!!同一MC不同实例之间是否可同步!?

[复制链接]
发表于 2009-3-23 22:42:08 | 显示全部楼层 |阅读模式
本人目前正在努力制作一款超强的游戏,按目前的进度,再有一礼拜应该能面世~

但现在游戏中有一严重问题需要大家帮助:

我现在需要同一个元件的不同实例之间可以同步。举例:

现有一“空地A.mc”,A中有红色小球ball.mc,以及ball1,ball2,ball3...,在A.mc内的帧上写了代码,使bal1234被点击时能播放第2帧"爆炸".

现将空地A复制,起名“B.mc”(B中也包含很多ball.mc)。通常情况下,A、B中的小球点击可以爆炸,但A中ball1炸了,B中的ball1还在,

但我现在需要实现:

点击空地"A”中小球,让"B"中对应的小球也会爆炸。

请问是否有实现办法?!?!

(注*小球为举例需要,本人制作的游戏与小球无关,我保证游戏出来后会相当NB~)
发表于 2009-3-23 22:47:28 | 显示全部楼层
用中介者模式即可轻松完成此需求。
PS:呵呵。超强的游戏貌似是不会遇到这样的小case问题的哦。
回复 支持 反对

使用道具 举报

发表于 2009-3-23 23:09:24 | 显示全部楼层
要先把设计模式做好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-24 03:06:30 | 显示全部楼层
补充:

“空地A.mc”中控制小球点击爆炸的代码,我是用for循环写成的,因为“小球ball”有很多很多:

for(i=0; i<50, i++){
this["ball"+i].onPress = function() {
this.gotoAndPlay(2;)
}
} //帧上代码

如果把代码写在小球身上,倒是有可能实现联动,比如:

on(Press){
_root.A.ball1.gotoAndPlay(2;)
_root.B.ball1.gotoAndPlay(2;)
} //MC上代码

但小球多了,我估计会累死....而且也不好修改;

具体求助:  希望用 for循环 来实现  A、B内同一mc的动作(点A中的ball1爆炸,B中对应的ball1也爆炸)

不知道大家是否理解。急盼解答~~

[[i] 本帖最后由 gliath 于 2009-3-24 03:30 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-24 03:08:18 | 显示全部楼层
多谢二位回答,但没听说过啥叫“中介模式”啊....

可否具体讲讲。

头一次听说Flash中模式的概念,惭愧惭愧....

另外,游戏素质请大家放心,绝对是同类游戏中最强的!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-24 03:40:39 | 显示全部楼层
我去网上搜了“中介者模式”.... 我认为,我铁定不会研究那种方法了...天书一样~

本人中级菜鸟一只,但不懈努力ing,核心思想是用最简单的办法实现最佳效果。

所以各位老鸟们,能用AS2解决这个问题就别用太高深的办法了,多谢多谢~
回复 支持 反对

使用道具 举报

发表于 2009-3-24 13:44:25 | 显示全部楼层
另外,游戏素质请大家放心,绝对是同类游戏中最强的!

对于这个,我不毫怀疑,因为一个好的游戏起决定性作用的往往是游戏创意本身。
我去网上搜了“中介者模式”.... 我认为,我铁定不会研究那种方法了...天书一样~本人中级菜鸟一只,但不懈努力ing,核心思想是用最简单的办法实现最佳效果

不过话说回来,如果没有好的架构、技术支持,那么再好的创意也很难完美的表现出来。所以是不是最强,我就要拭目以待了,因为一个游戏如果满是bug,可操作性完全不能保证的话即使创意在再好,我想我也不太会喜欢的。
能用AS2解决这个问题就别用太高深的办法了

对于这个,我想说的是,努力学习吧,从基础学起。设计模式是不分AS2、AS3以及PHP和.net的。

[[i] 本帖最后由 ibio 于 2009-3-24 13:46 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-3-24 14:18:21 | 显示全部楼层
学了没坏处吧,设计模式是每个程序员都该接触的吧。。。

简单的方案
  1. for (var i:int = 0; i < 10; i++ ) {
  2.                                 var bomb:Bomb = new Bomb();
  3.                                 addChild(bomb);
  4.                                 bomb.x = stage.stageWidth * Math.random();
  5.                                 bomb.y = stage.stageHeight * Math.random();
  6.                                 bomb.addEventListener(MouseEvent.CLICK, clickHandler);
  7.                         }

  8. private function clickHandler(event:MouseEvent):void {
  9.                         Bomb(event.target).Blast();
  10.                 }
复制代码


  1. package {
  2.         import flash.display.Sprite;
  3.         import flash.utils.Dictionary;
  4.         public class Bomb extends Sprite {
  5.                 public static var bombs:Dictionary = new Dictionary(false);
  6.                 public function Bomb() {
  7.                         bombs[this] = this;
  8.                         draw();
  9.                 }
  10.                
  11.                 public function Blast(dis:Boolean = false ):void {
  12.                         delete bombs[this];
  13.                         this.visible = false;
  14.                         trace("bin!");
  15.                         this.parent.removeChild(this);
  16.                         if (!dis) {
  17.                                 for each (var b:Bomb in bombs) {
  18.                                         b.Blast(true);
  19.                                 }
  20.                         }
  21.                 }
  22.                
  23.                 private function draw():void {
  24.                         graphics.clear();
  25.                         graphics.beginFill(0xFFFFFF * Math.random());
  26.                         graphics.drawCircle(0, 0, 30);
  27.                         graphics.endFill();
  28.                 }
  29.         }
  30. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2009-3-24 14:29:12 | 显示全部楼层
所以各位老鸟们,能用AS2解决这个问题就别用太高深的办法了,多谢多谢~

有时就是想不明白大家对AS2是怎么看的。不同人之间看法差异太大了
回复 支持 反对

使用道具 举报

发表于 2009-3-24 15:30:19 | 显示全部楼层
这个非常超级的游戏 还有一周就可以完成了 恭喜恭喜
一般情况 学习设计模式入门需要 2个月时间 解决这个问题的构架需要2天时间 看来一周是玩不成了
回复 支持 反对

使用道具 举报

发表于 2009-3-24 15:34:24 | 显示全部楼层
"超级游戏"的认知是建立在:
如果把代码写在小球身上,倒是有可能实现联动,比如:

on(Press){
_root.A.ball1.gotoAndPlay(2;)
_root.B.ball1.gotoAndPlay(2;)
} //MC上代码




for(i=0; i<50, i++){
this["ball"+i].onPress = function() {
this.gotoAndPlay(2;)
}
} //帧上代码

占资源的情况下的
回复 支持 反对

使用道具 举报

发表于 2009-3-24 15:34:55 | 显示全部楼层
方案1:在球上dis一个event,praent监听event,一旦发生遍历所有的存在的ball,做爆炸
方案2:有一个全局函数,动作为爆炸所有的球,当球被点击后去执行这个全局的函数
这是适合楼主的方式,别谈数据结构和设计模式了,我希望2周内能玩到这个超强的游戏 HOHO
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 12:35:35 | 显示全部楼层
超级感谢诸位解答!! 本菜鸟虚心研究中....

另外,所谓“超强游戏”,我补充一下,应该不是程序上多炫多复杂,免得蓝色的程序达人们天马行空的往那边想象,应该是画面和拟真程度上比同类游戏要出色~

当然众口难调,游戏发布后大家还请轻拍~

我研究去了,大家敬请期待~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 12:52:55 | 显示全部楼层
原帖由 [i]pigu 于 2009-3-24 14:18 发表
学了没坏处吧,设计模式是每个程序员都该接触的吧。。。

简单的方案
for (var i:int = 0; i < 10; i++ ) {
                                var bomb:Bomb = new Bomb();
                                addChild(bomb);
                                bomb.x = stage.stageWidth * Math.rand ...


超级强烈感谢pigu同志给我写这么长代码!我学!但本菜鸟主要做设计工作,太深奥的程序对我确实有难度~  我努力吧~

我目前停留在AS2阶段,还没来得及研究到3以及用类啊,包的解决问题,所以....T_T    不过思路我会好好分析
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 12:54:13 | 显示全部楼层
原帖由 [i]hongzhipeng 于 2009-3-25 12:41 发表
我会帮助你的 支持你


T_T 感谢支持,眼泪哗哗的...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 13:10:26 | 显示全部楼层
原帖由 [i]hack86 于 2009-3-24 15:34 发表
方案1:在球上dis一个event,praent监听event,一旦发生遍历所有的存在的ball,做爆炸
方案2:有一个全局函数,动作为爆炸所有的球,当球被点击后去执行这个全局的函数
这是适合楼主的方式,别谈数据结构和设计模式 ...


hack理解我~  简单为王。  方案2中,此函数应该不是爆炸所有的球吧,应该是爆炸A、B两边中的某球["ball"+i]吧?

function blast () {
_root.A["bal"+i].gotoAndPlay("blast")
_root.B["bal"+i].gotoAndPlay("blast")
}
for(i=0;i<50;i++){
  ["ball"+i].onPress = function() {
        blast();
    }
}

hack大哥,你看是这思路么?!   我觉得很有戏哎!!
回复 支持 反对

使用道具 举报

发表于 2009-3-25 13:55:26 | 显示全部楼层
right...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 14:27:30 | 显示全部楼层
再次感谢各位达人,我通过一个超弱的办法给解决了!!!!! 还是用 for循环,我把文件发上来!

MC实例同步问题.swf (1.28 KB, 下载次数: 369)
回复 支持 反对

使用道具 举报

发表于 2009-3-25 14:44:07 | 显示全部楼层
很好 很强大 非常强大 非常厉害
回复 支持 反对

使用道具 举报

发表于 2009-3-25 14:50:50 | 显示全部楼层
呵呵,你们聊得很有意思
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-25 15:00:40 | 显示全部楼层
原帖由 [i]hack86 于 2009-3-25 14:44 发表
很好 很强大 非常强大 非常厉害



^_^!  备受鼓舞!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-7-24 12:48 , Processed in 0.109099 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表