flash游戏吧 关注:9,372贴子:40,651

给大家一些好的功能的建议(音乐 物品栏 怪物掉落 等等)

只看楼主收藏回复

我一直在研究用flash实现一些的功能
现在把一些成果和大家分享
不定时增加和更新内容


IP属地:江苏1楼2014-05-08 21:40回复
    1 音乐系统
    这里我实现了包括自动音乐循环 音乐淡入 音乐淡出 调节音量 随机切换音乐的功能
    package
    {
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import fl.transitions.Tween;
    import flash.media.SoundTransform;
    import flash.media.SoundMixer;
    import com.greensock.TweenLite;
    import com.greensock.TweenMax;
    import flash.utils.getDefinitionByName;
    public class BackgroundMusic
    {
    private var sound0:Sound;
    private var soundct:SoundChannel=new SoundChannel();
    public var lastid:int = 0;
    public function BackgroundMusic()
    {
    }
    public function playbgsound(type:int,notcontinuer:Boolean):void
    {
    lastid = getmusicid(type);
    var symbolName:String = "BgSound" + lastid.toString();
    var symbolClass:Class = getDefinitionByName(symbolName) as Class;
    sound0 = new symbolClass ;
    soundct = sound0.play();
    if(notcontinuer)
    {
    TweenMax.fromTo(soundct,10, {volume:0}, {volume:1});
    }
    soundct.addEventListener(Event.SOUND_COMPLETE,onComplete1);
    }
    public function setvolume(t1:Number):void
    {
    var transforme:SoundTransform = new SoundTransform(t1,0);
    SoundMixer.soundTransform = transforme;
    }
    public function stopSound():void
    {
    soundct.stop();
    lastid=0;
    soundct.removeEventListener(Event.SOUND_COMPLETE,onComplete1);
    }
    public function stopbgsound():void
    {
    TweenMax.to(soundct,6, {volume:0});
    lastid=0;
    soundct.removeEventListener(Event.SOUND_COMPLETE,onComplete1);
    }
    private function onComplete1(e:Event):void
    {
    soundct.removeEventListener(Event.SOUND_COMPLETE,onComplete1);
    playbgsound(Main.sceneid,false);
    }
    public function changemusicrd():void
    {
    changemusic(Math.floor(Math.random() * 15 + 1))
    }
    public function changemusic(tt:int):void
    {
    stopSound()
    playbgsound(tt,true)
    }
    }
    }


    IP属地:江苏2楼2014-05-08 21:45
    收起回复
      soundct.addEventListener(Event.SOUND_COMPLETE,onComplete1);
      注意到这句话出现了很多次
      意思是soundct播放完是调用onComplete1这个函数
      private function onComplete1(e:Event):void
      {
      soundct.removeEventListener(Event.SOUND_COMPLETE,onComplete1);
      playbgsound(Main.sceneid,false);
      }
      这个函数的作用是循环播放,这里我们使用了之前的playbgsound函数
      由于循环播放的可能是雨声之类的,我就没有淡入淡出,直接重新播放了这个音乐
      Main.sceneid是我的rpg游戏的场景音乐序号,根据场景决定什么音乐


      IP属地:江苏3楼2014-05-08 21:57
      回复
        public function setvolume(t1:Number):void
        {
        var transforme:SoundTransform = new SoundTransform(t1,0);
        SoundMixer.soundTransform = transforme;
        }
        这个函数用于把整体音量设置成ti
        比如t1=.5就是一半音量
        可以用在音量条上
        public function stopSound():void
        {
        soundct.stop();
        lastid=0;
        soundct.removeEventListener(Event.SOUND_COMPLETE,onComplete1);
        }
        这个函数用于立即结束音乐
        public function stopbgsound():void
        {
        TweenMax.to(soundct,6, {volume:0});
        lastid=0;
        soundct.removeEventListener(Event.SOUND_COMPLETE,onComplete1);
        }
        这个函数用于淡出,会在6秒内把soundct的volume变成0
        public function changemusicrd():void
        {
        changemusic(Math.floor(Math.random() * 15 + 1))
        }
        这个函数结合下面的看,很简单的给下面的函数一个参数
        public function changemusic(tt:int):void
        {
        stopSound()
        playbgsound(tt,true)
        }
        这个函数立即结束当前的音乐,并且播放了tt指定的音乐


        IP属地:江苏4楼2014-05-08 22:01
        回复
          2 怪物掉落
          这里我们关注如何让怪物掉出有意思的装备,这里我有参考暗黑破坏神的掉路系统
          这里不关注怎么生成物品(事实上生成物品很复杂也讲不过来),我们只关注要生成怎样的物品
          我的怪物有以下相关属性
          public var money:int = 0;
          //决定了怪物掉落金钱的基础值,如果你的游戏有提高金钱获得量的属性,可以作用在这个值上,如果有随机大小,也作用在上面
          public var dropmst:int = 0;
          //物品掉落类型****重点,下面单独说****
          public var droprate:int = 0;
          //掉落几率,决定了每次掉落有多少几率掉东西
          public var drops:int = 0;
          //掉落量,决定for循环的次数,每次for循环都将结合上面的几率决定是否掉东西
          public var dropcolor:int = 0;
          //品质,决定的掉落物品的品质(成为绿色蓝色紫色装备的可能之类的),注意只是可能,不是一定的


          IP属地:江苏5楼2014-05-08 22:08
          回复
            好 现在 假设我们的角色杀死了怪物
            那么首先判断是否掉落金钱
            然后根据money:int 决定掉多少
            接下来我们设一个for循环来循环drops:int 次数
            每次根据droprate:int来获得一个概率来运行掉落,或者是什么都不干
            也就是说我的怪物如果掉落10个,每个有30%几率
            那么我们将会得到0~10个物品,但是平均会得到3个
            接下来我们用dropmst:int获得一个id,就是物品的id,决定掉什么物品
            最后通过 dropcolor:int 给物品附一个品质,我的游戏中就是颜色(白 绿 蓝 紫)


            IP属地:江苏6楼2014-05-08 22:12
            收起回复
              dropmst:int是一个数字
              他对定一个函数,这个函数有一个int的返回值
              比如
              private function getitem(dropmst:int):int
              {
              var t1:int = 0;
              switch (type)
              {
              case 1 :
              t1 = Main.getitemid.basemst1();
              break;
              case 2 :
              t1 = Main.getitemid.basemst2();
              break;
              case 3 :
              t1 = Main.getitemid.basemst3();
              break;
              case 4 :
              t1 = Main.getitemid.basemst4();
              break;
              case 5 :
              t1 = Main.getitemid.basemst5();
              break;
              }
              return t1;
              }
              这样,就根据这个dropmst:int去对应的函数找这个返回值


              IP属地:江苏7楼2014-05-08 22:15
              回复
                假设我们现在去Main.getitemid.basemst2();找物品id
                找到这个函数(在我的游戏中)
                public function basemst2():int
                {
                var t1:int;
                var t2:Number = Math.random();
                if (t2 > .85)
                {
                t1 = getweapon(2);
                }
                else if (t2 > .7)
                {
                t1 = getdefence(2);
                }
                else if (t2 > .5)
                {
                t1 = getdivers(1);
                }
                else
                {
                t1 = 8;
                }
                return t1;
                }
                我用了一个随机数决定了一下选择哪一个下级函数,这个下级函数也是一个有返回值int的函数
                这些下级函数有一个参数决定等级高低,不是物品的品质,而是基础物品的等级(比如木剑 铁剑 青锋剑, 布甲 皮甲 针胄甲,小药水 中药水 大药水这种,自己定义的同一类的物品的底材等级)
                这些下级函数从名称看,明显是对应找武器,找防具,找杂项
                参数高低自己可以定,我如我这个怪物掉落的类型比较容易出好武器,但是不出好防具,那么我可以
                t1 = getweapon(5);
                t1 = getdefence(2);
                那么通常出的武器就会比较好,而防具比较差
                这和品质无关,前期boss的品质可能也很好,但是他可能不能出高级底材,比如经常出紫色的木剑,却不能出绿色的青锋剑之类的


                IP属地:江苏8楼2014-05-08 22:22
                回复
                  假设随机到了找武器的函数
                  找到这个函数(在我的游戏中)
                  public function getweapon(attri:int):int
                  {
                  var t1:Number = Math.random();
                  var t2:int;
                  if (t1 > .86)
                  {
                  t2 = getdagger(attri);
                  }
                  else if (t1 > .72)
                  {
                  t2 = getgun(attri);
                  }
                  else if (t1 > .58)
                  {
                  t2 = getaxe(attri);
                  }
                  else if (t1 > .44)
                  {
                  t2 = getsword(attri);
                  }
                  else if (t1 > .30)
                  {
                  t2 = getwand(attri);
                  }
                  else if (t1 > .16)
                  {
                  t2 = getsol(attri);
                  }
                  else if (t1 > .08)
                  {
                  t2 = getthrow(Math.floor(attri*.25+.75));
                  }
                  else
                  {
                  t2 = getlfhdagger(Math.floor(attri*.25+.75));
                  }
                  return t2;
                  }
                  和刚才的函数一模一样,几乎,只是又下了一级
                  这里看名称,明显是根据一个随机数,决定是掉什么武器,有匕首,枪,法棒,剑等等,
                  并且有时把参数做了改动(这因为我的游戏的武器种类数量不相等,比如我有7种基础主手匕首,却只有2种副手匕首)
                  相信到这里,大家已经感受到这是个树状结构了,根据一个dropmst的值,不断往下分


                  IP属地:江苏9楼2014-05-08 22:27
                  回复
                    假设我们随机到了剑
                    那么这里就是最后一级了,当然你的游戏更大更好的话,也可以分更多的层级
                    比如分为法系剑 实体剑 轻型剑 重剑等等
                    我们这里直接返回物品id了
                    public function getsword(attri:int):int
                    {
                    return getnormal(attri,78,7);
                    }
                    注意到我用了一个函数getnormal来实现返回id
                    这是因为我们要考虑到物品的底材参数的正确使用
                    我的游戏中,剑的物品id从78开始,一共有7个
                    getnormal(attri,78,7);的意思是
                    产生一个78到78+attri的随机数
                    如果attri大于78+6就返回78+6
                    因为78+6已经是最后一把剑了
                    这样一来,attri越大,越能出好剑,但是无论多大有可能出差剑,而且一定出剑
                    下面是这个函数
                    private function getnormal(attri:int,t1:int,t2:int):int
                    {
                    var t3:int = Math.floor(Math.random() * attri + t1);
                    if (t3 > t1+t2-1)
                    {
                    t3 = t1 + t2 - 1;
                    }
                    return t3;
                    }
                    完成,希望大家可以参考用到自己的游戏中


                    IP属地:江苏10楼2014-05-08 22:33
                    回复
                      楼主辛苦!


                      IP属地:河南11楼2014-05-09 14:01
                      回复
                        物品方面
                        设置属性
                        攻击 = "2-7"
                        防御 = "0-5"
                        力量 = "3-8"
                        属性最小值 = Number(攻击.split("-")[0])+Number(防御 .split("-")[0])+Number(力量 .split("-")[0])
                        属性最大值 = Number(攻击.split("-")[1])+Number(防御 .split("-")[1])+Number(力量 .split("-")[1])
                        物品攻击 = 随机数( Number(攻击.split("-")[1])-Number(攻击.split("-")[0]))+ Number(攻击.split("-")[])
                        以此计算
                        然后物品的品质跟最大值和最小值和现有值计算


                        IP属地:广东12楼2014-05-14 00:42
                        回复
                          <List><!-- Name=物品名称,Pic=物品图标,Type=物品使用类型,PRN=适合职业 !-->
                          <Name>小刀</Name><Pic>Date\Icons\Sword2.png</Pic><Type></Type><PRN>战士,法士</PRN>
                          <!-- ATK=攻击,MAG=魔力,DEF=防守 !-->
                          <ATK>5:8</ATK><MAG>0</MAG><DEF>2:4</DEF>
                          <!-- STR=力量,INT=智力,AGE=敏捷,GLR=魅力,LUY=幸运 !-->
                          <STR>0</STR><INT>0</INT><AGE>0</AGE><GLR>0</GLR><LUY>0</LUY>
                          <!-- HP=HP,MP=MP,Skill=物品附加技能(暂不可用),Glod=物品底价 !-->
                          <HP>0</HP><MP>0</MP><Skill>0</Skill><Glod>100</Glod>
                          <!-- Explain=物品简介 !-->
                          <Explain>杀鸡焉用牛刀,此刀足以,小虾小鱼小妖小怪,都给我秒吧!</Explain>
                          </List>
                          <List>
                          <Name>牛刀</Name><Pic>Date\Icons\Gun8.png</Pic><Type></Type><PRN>战士</PRN>
                          <ATK>10:14</ATK><MAG>0</MAG><DEF>6:10</DEF>
                          <STR>0</STR><INT>0</INT><AGE>0</AGE><GLR>0</GLR><LUY>0</LUY>
                          <HP>0</HP><MP>0</MP><Skill>0</Skill><Glod>300</Glod>
                          <Explain>没错,杀鸡焉用牛刀,此刀专门斩杀大型单位,什么妖魔鬼怪之类的,都给我滚吧,我专为BOSS而生.</Explain>
                          </List>
                          <List>
                          <Name>铁剑</Name><Pic>Date\Icons\12.png</Pic><Type></Type><PRN>战士</PRN>
                          <ATK>16:24</ATK><MAG>0</MAG><DEF>8:14</DEF>
                          <STR>0</STR><INT>0</INT><AGE>0</AGE><GLR>0</GLR><LUY>0</LUY>
                          <HP>0</HP><MP>0</MP><Skill>0</Skill><Glod>450</Glod>
                          <Explain>这是一把军制的铁剑,属于步兵正常佩带的武器.</Explain>
                          </List>
                          <List>
                          <Name>木杖</Name><Pic>Date\Icons\Stick2.png</Pic><Type></Type><PRN>法士</PRN>
                          <ATK>0:4</ATK><MAG>4:10</MAG><DEF>2:6</DEF>
                          <STR>0</STR><INT>0:2</INT><AGE>0</AGE><GLR>0</GLR><LUY>0</LUY>
                          <HP>0</HP><MP>0</MP><Skill>0</Skill><Glod>200</Glod>
                          <Explain>一根小小的木杖,可以砸人,也可以当火把,最重要的是可以成为法士的武器,让法士握在手中施放魔法更自信.</Explain>
                          </List>


                          IP属地:广东13楼2014-05-14 00:45
                          回复
                            有没有物品栏的代码呀?背包什么的


                            IP属地:广东来自Android客户端15楼2014-05-15 09:12
                            收起回复
                              这是什么编程语言?


                              IP属地:广东来自Android客户端17楼2014-08-03 16:01
                              收起回复