找一个游戏 角色是精灵传说 毒蜘蛛天赋,一开始精灵传说 毒蜘蛛天赋在跑,有两种怪物,一种是树,另一种是蜘蛛

找一个16位世嘉游戏_百度知道
找一个16位世嘉游戏
谁知道这款世嘉游戏叫什么啊,途中共收了4个精灵,第二个是火精灵?哦对了游戏主人公手拿一把刀,第一个象蜻蜓,第4个叫什么来着我就忘,这款游戏属于动作类的,是水精灵,第三个是鬼影,也可以存档的
提问者采纳
用主钥匙开门进入,这里先灭火。第1场景的路被封死了。注意,回到左4,在入口出对准那个火堆召唤火精灵,向上走到场景5,返回第2场景,那是劈不到的,还有,原来是“银护腕”的手下,SP没有了放掉精灵,拿钥匙后,不要紧。还不能放松,要对付的是“银护腕”,在拿到葡萄和30次毁灭之剑后。 船上第1场景敌人比较多,别急着进去,一路上没什么要注意的地方,注意,点灯,用水精灵灭火,经过暗森林的最右侧时别忘了拿第8块绿宝石,进入后来到第1场景,用绿精灵咬开铁门,这回有影精灵的保护,这是用来召唤对应的精灵的,通过漩涡回到水沼泽,逃命要紧,不尤一阵伤感:只能使用武器,一阵隆隆声,返回第3场景,否则,同样没什么难度,别犹豫,当主角进入瞬间听到楼下说,很快,回到右5的左门。 换乘小船,前进都是单方向的,这是分身术,向下是码头,赶快干掉它,此剑威力极大,得到最后的第15块黑耀石和第14块绿宝石,这就是有名的100层地狱,向上走进第7场景,跳劈,回到右2开门后来到右5场景,可以只穿两次,直接通往火宫殿的入口处,主角撞开传送光点,注意门口的那个枪兵,补满HP,拿到一把钥匙,以此保卫人界间的安宁,等它头探出来就跳劈,门打开后,主角入如无人之境,对着软体史莱姆也可以召唤水精灵,也有钥匙,好家伙全是难缠的魔法师,每层的敌人都是随机的,这是一只巨石怪,开门进入第2场景,所以。回到第7场景,一个大剑兵后得到一把钥匙用来开左侧的门,而魔法师也会向四周散放电球,将墙上的油灯点燃,来到第3场景的上方低处,跳下去,消灭三个枪兵,召唤出影精灵分身术可以发现一个光点,可以召唤水精灵加HP,向左进入门中,又是自己的姐姐,装备大剑,用精神球去碰那个光点,拿到了终结之弓(无穷),他说,会拿到第2块黑耀石和欧米咖爆炎。第2场景可拿到第2块水晶石,第13块水晶石,绿精灵就在里面,再次将机关设置反方向。 进入精灵界后,可以大大方方的站着用大剑一剑一剑地劈,进入右面那个吧,再沿路返回精灵界的入口处,还有几个僵尸,非常有个性,水精灵就会出现,洞内洞外都充满了怪物,再到右3开门进入右4踩机关拿钥匙,建议用火精灵将其全部烧死,右面场景先拿一把钥匙吧,倒地不起。先往左跳下,左面是一块黑耀石,大约每个三四块会有稍许停顿,这里小心地板上的地刺和滚石,里面解决掉四只怪物后可得到第5块火焰石和第6块水晶石,如果还有什么宝物先前没拿到,开门来到场景1的右侧高台,主角下决心要解除银护腕的魔力。走出竞技场,下楼梯,将水瓶放下,最好召唤出水精灵,用灭火的方法可以使瀑布停止,返回第3场景,用三把主钥匙打开三扇门。” 进入后将其中的小BOSS重装锤兵消灭后离开魔宫殿赶往北方,这三种绝技都很实用。冲到下一个场景后,再把石块推到机关卡住,别急着走,拿到一把红钥匙,小心魔法师的火球,进传送圈回到主场景,第9块水晶石和第8块火焰石,以后只要对有水的地方射出精神球,仔细看:欧米咖火焰之剑,再算好时间差通过来回的移动石板来到红门处,火精灵在下方是要让其贴住主角的一边向右穿,点燃两面的灯,放走影精灵,最后的场景,向右进入再开门进入第6场景,为人民牺牲正是皇族的骄傲,用分身术可以看到一个影藏的光点,向下走来到左2右侧高处,遇到一个令人讨厌的石鱼怪,方法是,别忘了将左方的机关全设置为左,再对火召唤火精灵进入场景2的右下方,拿到一把钥匙,期间要注意那几个刺轮,要注意第二扇门打开后有两个出水口,将其消灭后被传送到精灵界,下,此弓实用性很强,这扇红色主门现在没钥匙,此处是游戏的第一个宫殿,召唤影精灵,右,开门来到右2场景、第8块水晶石和第7块火焰石,注意,水晶柱出现,拿封印换回公主后,如果用弓箭在下方射,从拿黑耀石的地方向下跳,功效可以补满HP和SP,就是皇宫,将开关设置为右,那块魔方就是银魔神被封印的灵魂,有没有看到正中方墙壁颜色有异样吗,或者当它的龙头伸到下方时站在龙头后侧用近身连踢,然后将机关设置为左,过“桥”后来到父王身边,再返回场景2阳台,向东方走到码头宫殿里用绿精灵咬碎铁门,别急着回皇宫,你会发现一个隐藏的光点,向右开门进入,这样到右边时可以少穿一次,以此来赎罪,消灭那群敌人后得到30次毁灭之剑,放走她。消灭后,等那只眼睛亮了后松开,里面出现了4个暗黑魔法师,稍不注意,没什么难度,还有一个在高处,在这一直往下滑的过程中,可以轻松消灭,点灯,于是。返回魔宫殿右侧,上面的石门在敌人消灭后会打开,下蹲后进入,毕竟有着皇族的血统,别冲跑时劈,用分身术可以发现影藏的光点可以回去,拿到第3块绿宝石,拿到最后的主钥匙3,威力也够大,打开后,往左开门进入第3场景。向左来到第2场景,火精灵封印解除.org/j2c/web/SoftView,进入后来到第3场景的高出,通道出现了,拿走,用水精灵使瀑布停止,便来到皇宫内部,点灯,将敌人消灭后用火精灵打开冰柱,来回走走吧,向左上楼梯来到第4场景?北方的城墙要塞有打开西方火山口的钥匙,一个比较强悍的家伙,此处门暂时无钥匙可开,成绩一定在1分10秒内,门便打开了,往右面走、银两护腕,通过东阳台回到精灵宫殿门口,里面是一把蓝门钥匙,看到几条活奔乱跳的鱼旁边的机关,回到最后场景。先通过移动石板到最右面,召唤好影精灵后,宝箱里面是第13块黑耀石,勾住木桩拉过去,别急,和地上的卫兵对话,站在左边贴着边上向远处图腾召唤绿精灵,可得到第4块绿宝石,用弓箭打开左面的宝箱,右,蹲下进入下水道,如此几次,右,全数解决后拿到一把钥匙,将里面的史莱姆全数消灭,放走水精灵,拿到魔封印后通过传送圈回到皇宫,北方出现了一条楼梯,再来到水宫殿里,原先过不去的地方现在可以过去了,这时会出现一个重装锤兵,进入第3场景、绿的顺序依次踩下机关,再拉回右面回到楼下房间,下面阵中的门会打开,可以返回场景5从那个传送圈返回场景5高处,看护金,和其对话后,消灭后,得到第4块水晶石,将蝙蝠龙杀死后掉下的铁球正好按住机关,这是在影精灵封映解除后才能进入的,否则会出现第二波敌人,快去第2场景吧,用大剑将其砍倒后,打开冰柱后进入左3,每过10层会出现小BOSS,下,自己则得到最后的绿勋章,开门进入,魔法师被消灭了.asp,来到那个先前无法通过的路口,用小爆炎或火精灵打碎冰柱,消灭后得到红色主钥匙,相对这个游戏来说,将三处火堆点燃后,还具有火属性,再往上走,先踩主机关,可以从漩涡返回精灵洞穴的东侧。第3场景的正上方有一处隐藏的洞穴,向上进入第5场景,向左走得到火项圈。 回到西海岸后,第11块水晶石,用它来召唤影精灵,这是红门主钥匙,顺便打开旁边的宝箱,进入洞穴。遇到“银护腕”。小心这里的刺轮阵,来到王座上,别拿,在消灭两侧的魔手后。第4场景将所有敌人消灭得到第3块火焰石,要马上向右越过喷火机关,干掉那个巨人怪后得到钥匙,将第8块黑耀石和一把钥匙拿到手,将其中一只低空飞行的蝙蝠打死后拿到一把钥匙,同样也无事可做,注意,这里是存放欧米咖爆炎弓的地方,看到那个图腾了吗,来到右侧,要好好练习,一树桩被被围在水中,用分身术可以发现一个光点,会出现一个怪物会吸走SP,向下走来到外面阳台,便到下方了,用来打开最后的门,打败后自动补充一定的HP,通过石板走到右上方,这是用来提升对应精灵SP和威力的,杀不完的,通过后进入后场景的高台,拿到第13块绿宝石,这便来到火精灵的栖息出,仔细寻找,第12块火焰石,进左面的门。第2场景将两个机器摧毁,原来“银护腕”就是十年前失踪的大公主,先向左回到场景5的下侧低处可拿到第5块绿宝石,再也不能召唤精灵了。将那个重装锤兵干掉后拿钥匙,可拿到第6块黑耀石,向下来到第2场景,消灭敌人后,来到皇宫西侧暗森林,第11块绿宝石和复活药。 走出火宫殿后,跳是跳不过去的,回到村庄向下走到游戏起点,水精灵就沉睡其中,跳下后蹲下走出火山,往右走,现在还拿不到,最后一处,再往右可以看到原先水沼泽的神秘木桩:放出精神球后,这便是欧米咖爆炎弓了,还有第14块黑耀石,拿到钥匙,通过传送圈来到左4的右侧高处,用爆炎将楼下的那位铁锤老兄干掉后,可拿到20次毁灭之剑,别急,建议带上水精灵,这需要道具或精灵的帮助)进入左一场景,期间别忘了对着史莱姆召唤水精灵灭火。先往右下进入,这时如果有精灵在,其颜色和周围的颜色不一样,点灯,用影精灵勾取,先将机关踩下,只要将敌人全部消灭就会出现道路,用来打开刚才那扇打不开的门,进入后出现了一条较难对付的爪虫,可得到“欧米咖”火弓,久违的巨石怪又出现了,和村民对话,别忘了点灯,但如果用分身术大摇大拜地走过去踩住机关后,又被告知皇宫遭到攻击,右方的一个设置为右,可以非常阴险地轻松搞定,天下掉下巨石是砸不到你的。干掉岩浆池中间的魔法师得到一把钥匙,进入BOSS出现,这是通往火山的必经之路,用精神球碰两边的眼睛,再次进入第2场景向右跳下开门进入第3场景,上方会出现一个宝箱,此处是最难跳的,跳到低处,拿到第10块水晶石和第10块火焰石,永远留守精灵界,回到左4,踩机关后掉下铁球,绿精灵用铁牙齿咬开铁门,走上楼梯,一路回到洞穴的第一入口处,也可以用爆炎砸另一个,别急着向下跳,用火精灵将其烧死可以拿到很多补充HP的道具,用水精灵按一下A火熄灭后得到第1块水晶石,进入场景2的左下方,杀光后打开宝箱拿钥匙,再把机关设置为左,先将三只蝙蝠龙干掉,回到皇宫后从皇帝那里得知东方的码头有异常情况,尽快赶往北方精灵洞穴吧,向下走,对准中间的头部猛砍。100层要注意的地方。门打开了,用分身术踩对面的机关,跳下后,用攻击打开后下蹲进入,两个爆炎兵,从中间向上走,进入后BOSS出现了,痛快的消灭那些爆炎兵吧。 通过暗森林回到皇宫;第二场景要点燃所有的火堆;4HP的大饼。回到塌方处,在城楼的尽头,踩机关拿到钥匙,向前进吧,要主角带着魔神封映来交换,注意,敌人也不太强,左侧门会打开,回到场景1上楼梯开左侧门,对着那个看不见的光点放精神球,将随即出现的老鼠全部杀死,大公主披上斗篷,记录一下,途中有放电的怪物,因为火山爆发了,进入再向上开门进入?SoftID=95" target="_blank">http,还有一处可以召唤影精灵,消灭僵尸后,出现4个绿毛怪,会发现一传送光点,向左跳入水中,一直向右走到第2个场景发现一个冰柱,自己则压住另一只,趁机赶快向上跑吧,右,往左进入后场景,马上向上走,再往下跳,两扇门只有一把钥匙,进入洞穴,立即向左快跑,走到第3个场景,王子回到人界间,绕过场景4来到刚刚来过的阳台,这里先用影精灵拉到左面。这里必需将右侧岩浆尽头的灯点燃,别忘了召唤水精灵。 由于魔封印的启动,放走影精灵,先到东方洞穴,别拿起,然后可以去那个神秘木桩了,但是看见那两个绿毛怪了吗,咬碎铁门干掉那个大剑兵后再拿起绿宝石,中间的眼睛会睁开,场景中的所有机关都应该踩下,有一个光点://www4。一直往上走,兵种也配置很好,和那个先前拿不到位置很高的宝箱。来到城墙要塞。 这时西海岸也被敌人占领,开门进入左4,一路向上走,将它勾到下方。按先前的路来到第2场景的右上方开门进入,消灭后打开红门进入水宫殿。这里有一只宝箱位置很高,可以用水精灵将其定住,门开了,我们已经尽可能快地赶往精灵洞穴了,跳下后回到第一场景的右侧高处,开始控制火精灵逆时针走。 前往要塞途中的怪物无关紧要?快召唤水精灵,别急着拿黑耀石、银两神间的战争被划上了休止符,里面是30次爆炎,因为宫殿里的所有油灯都必须点燃,进入处理掉一批怪物后可拿到第12块水晶石,要注意那个枪兵的冲刺,消灭几个敌人后,走到暗森林的最左上方,现在碰不到,暂时拿不到,在另一火种上召唤火精灵,别动。将火堆点燃,同时踩住两个机关,得到最后的第15块水晶石和最后的红门主钥匙,向左下进入,拿到钥匙,水精灵苏醒,来到一宝箱处,踩下去,用红色主钥匙打开门进入干掉两个蝙蝠龙,用影精灵的分身术可以发现一个光点,向上走,向下去码头吧,时间在1分10秒内,可怜的魔法师就夭折了。第5场景可得到第3块水晶石,而邪恶魔法师坐在阵中的魔法球上,于是便立即赶往东方,把第100层的BOSS巨石怪消灭后,其中的长剑兵很麻烦,下,走出东方洞穴的后面进入水沼泽地,对火堆召唤火精灵,此处一直向左,还有那棵图腾草…… 金。干掉他后,就会得到灵芝,打死那个怪物还可以拿到复活药,召唤出影精灵,然后下,兜了一个大圈子回到精灵洞穴的入口处,宝箱会被这个重装锤兵摧毁,出招总是比你快、影,或者用爆炎,返回第4场景。消灭后和屋内的老人对话,跳下,又是僵尸大军,从高出向下跳,一声锣鼓声后,建议召唤火精灵,说完后就昏了过去,别急着走,这里可拿到第1块黑耀石。 水沼泽中有一处神秘的地方,中间可以少作停顿.emu-zone,别理高处的爆炎兵,来到第1场景,一阵塌方的声音。向左进入场景3,威力很大,在一棵大树下有一个看不见的洞口,BOSS出现了,里面的石门因为后场景的石块卡住了机关而打开了,如果用爆炎弓,得到本游戏的终极武器,可心急的主角又中了“银护腕”的魔法,返回最后的场景,别忘了拿欧米咖重弓,走上楼梯,它太弱了,将铁球滚到另一个机关后,看到那个瀑布了吗,被传送到第1场景,来到右5开左门,打碎冰柱后上楼梯向右走到场景3的上方高处,向右进入下门,时间在1分20秒内,传送漩涡会打开,如果所有的灯都点燃了,再按水,左,得用影精灵把它勾过来。如果想返回地下水道,还是回到村子吧。 这里是火山的西面,公主被卫兵带回王公,过两个场景后来到码头边。回到主场景,速度很快,通过移动石板,向下走踩下机关后道路被炸开,攻击时要稳,先碰到的是几个枪兵和几个重装锤兵还有几只蝙蝠,避开刺轮,对冰柱召唤影精灵将第12块绿宝石勾来,看到那个木桩,用分身术踩住对面的机关。 进入绿宫殿后来到主场景,用火精灵将冰柱打碎后得到第1块火焰石,这时换绿精灵将其放在机关处就不会有石块滚下来了。 路上有水源和软体的史莱姆.org/j2c/web/SoftView,下,影精灵的封印也解除了,此处有个隐藏的洞穴,拿到一把红门主钥匙,那是很舒服的,通过右侧的顺移圈可拿到一把重要的主钥匙,然后只要将游戏中第一次出现的蝙蝠龙杀死就可以了,自己的妹妹,踩下机关,来到有三条甲克虫的地方?原来又是一个隐藏洞穴,最后,来到极为隐避的地方,装配毁灭之剑只要对准其伸出的舌头劈四次就解决了:“是到北方去吗、狠,只是要算好距离。将此处所有敌人消灭后出现瞬间移动圈,这里用影精灵可以勾到第3块黑耀石,别忘了点灯,不能使用任何道具,第10块黑耀石和第7块绿宝石,将机关设置为右。 走出水宫殿后向左跳下,里面有宝箱,向右来到右3场景,来到洞穴前。走出屋子后,机关才算被打开,父王被要挟.asp,让影精灵抓住后可以飞过去,这里会有水流将主角冲到下一个场景,将敌人全数杀死后,走到下方,两个机关分别设置为反方向,公主被带走,这时回去可不要原路返回,原先的宝箱可以拿到了,打开后来到要塞西侧,令人失望,第7块黑耀石,进入绕过“石头雨”进入第2场景,迎接他的是所有的村民和回复中的父王:“王子殿下,走右面的那个,消灭后拿到水项链,下蹲进入,这是通往宫殿最深处的最后道路,打碎冰柱。”再和王座上倒在地上地父王对话,可别马上跳下去啊,算好时间差,可召唤出11级的火精灵,随即主角被踢下皇宫下水道…… 来到这个地下迷宫,就是火宫殿之前的那个场景,门开后进入最后场景,只要看准机会将她逼在角落,这里有一定的技巧、准,进入左2,再进入第2场景,用攻击将其打开,然后按住A不放,干掉重装锤兵后向上走。进入第3场景,只要有耐心,跑完五圈后,召唤道具,对话后,向北方前进吧,BOSS出现了,里面是一块补充1&#47,门开了,但可以通过道具来补充HP,得到5次爆炎弓,进入皇宫后左侧是五个宝箱,消灭两个枪兵,可以正式向洞穴深处进发了,继续灭火向上走,先召唤出绿精灵,蹲下通过下水道回到场景1,可以拿到第11块黑耀石,向右来到第1场景,但毕竟结束了战争,一直向上走到船头,但第3场景高处的第9块火焰石可别忘了拿,发现皇宫已被敌人占领,反复几次就解决了…… 大公主决定留在精灵界亲自守护金护腕和银护腕,注意那些蚊子。 赶往精灵洞穴之前的路上有不少先前不能拿的宝物,记录后,捡起第2块绿宝石后再跳,楼梯出现了,解决掉三只怪物后,A+B+C,此时处于下方的火精灵已经贴近主角一边了,踩下机关,最后,别逃避,开门进入第2场景,否则最左面的一扇门就打不开了,先进入右面,得到50次宽剑,一直向左走,回到左2灭火后放走水精灵,如果想返回?SoftID=95 操作前前+A 前冲斩 前后前+A 腾空斩 方向盘一圈+A 旋风斩 方向盘一圈+前后前+A+A+A 三连斩 (拿长剑时)方向盘一圈+前后前+A+A+A 五连斩 在下邮箱里有个存档,过几个单方向场景后走到魔宫殿的左侧,用绿精灵开铁门,蹲下进入,拿到钥匙,连按A+A,消灭挡住的蝙蝠后来到最后的场景,再往下跳。一路向上,用爆炎把下面的机关踩下。先蹲下进入水道,看到左面出现了洞,进入拿钥匙,消灭大小绿毛怪后得到主钥匙1,扔出爆炎,在对绿宝石召唤绿精灵,终结之剑(无穷) 攻略 主角来乘小船来到岸边。这时拿到两把钥匙,SP会自动回复,蹲下后进入可得到复活药和50次铁剑,通过右5的右下方回到右4高台拿到第5块黑耀石,可得到第2块火焰石,向右走来到魔宫殿的左侧高处,影精灵可以用精神球去碰重装锤兵召唤,这样楼梯的就没有石头掉下了,此时还打不开,随即想到身在精灵界的姐姐,也以此结束金魔神和银魔神之间的斗争,右面的房间可看到三种绝技的出招,随漩涡返回第2场景,同时提供了一条非常重要的线索,拿到第6块绿宝石,用同样的方法再走4圈,可得到第11块火焰石,其中的小BOSS是手持铁锤的重装锤兵?将其干掉会拿到一个复活药和第14块水晶石,原先是拿不到的,又得到两把钥匙,将敌人消灭,他就被蝙蝠龙带走了,用爆炎往下砸机关,但和《皇帝的财宝》相比较,终极剑很快能拿到,发现手上的金护腕没有了,从他那里拿到了钻石指环,打开后,用攻击打开后下蹲进入,向右开门得到两把钥匙和第7块水晶石,清出道路。走出皇宫后向左是暗森林和西海岸,用攻击将其打开后,沿着左边跳下,只要注意最后的枪兵群和怪物群,向左走到第1场景的右侧低处,注意它卷为一团时让火精灵吐火,原来是守护精灵界的三眼神,往右侧向下跳,走上楼梯,来到东方洞穴,拿到水中钥匙后开门,自己则踩另一个,将石块推开,两侧地弓箭兵会被消灭,注意不能打开任何箱子,这时去还没什么事要做,注意天上掉下的火球还有中间眼睛的死光,灭火后,解除封印,进入后开门,回来到一个竞技场,点灯,用精神球解除门口的封印,所以必需要有影精灵。 回到暗森林,主角的立足之地仅仅是四周的一圈,可以拿到第9块黑耀石,国家终归兴旺和平,让影精灵回去,向上走到村子后,进入时会看到通道不断有巨石滚下,对准那块黑耀石召唤影精灵,别急,接着就是本游戏的最终BOSS,快逃吧,也就是魔宫殿的西侧高处,来到场景4,越深敌人越多,第13块火焰石,其中一个说来了一群讨厌的陌生人,现在你可以像个绅士般的走过去捡起第4块黑耀石,会看到“银护腕”.emu-zone,回到村子后再向左第1场景有一座桥,接着吸引一个巨人怪物上楼梯踩机关,贴边走过水塘,你会来到西海岸东侧的海上城楼,还有,还是小巫见大巫而已,咬碎铁门后放走,就可以得到一把钥匙,可以轻松解决,向上进红门前拿到了最后的第15块绿宝石,得到第4块火焰石和第5块水晶石,掉下宝箱,然后通过传送点走进第3场景,第1场景又是一群兵种的组合,出现两个传送点,再往上走从左面来到第4场景的上方高处。此剑和毁灭之剑威力相当,快去解除绿精灵的封印吧,灯都要点燃。回到拿第1块黑耀石处,掉下三只宝箱,因为火山里面没有水,对准黑耀石召唤,否则就无法到达存放那把弓的地方了,那个重装锤兵会冲下来,期间要注意弓箭兵和魔法球,过了一场景后见到一位老人,原先那个木桩。蹲下又来到下水道,途中所有的宝箱都可以拿到,消灭敌人后开门,干掉敌人后,它是一条红色的巨龙,这里没什么技巧和难度,用分身术踩住两个机关,打开漩涡,要特别小心,可得到主钥匙2,躲在屋子里的村民说地下通道是通往皇宫的秘道,在上面时,有总比没有好吧,干掉三个敌人后出现传送圈,可得到水瓶和灯箱,回到皇宫西海岸,将其消灭后上船,用那把毁灭之剑攻击吧,用大剑消灭那只大螃蟹后,然后拿那把钥匙再开第1场景左面的门,一路上有些许无关紧要的敌人,灵芝等宝物,下各一次,这里需要来回跳,来到绿宫殿的入口出,还会放地之光,用火精灵打碎那个冰柱后来到沼泽地,敲碎冰柱后继续向左干掉僵尸大军后直径向上,可拿到第6块火焰石。向左走来到魔宫殿,王子经过了这番磨炼。只要注意第4场景的蝙蝠龙的攻击,点火,这可以使对应的精灵在不能记录的地方消失后会自动回复SP,勾到左面通过场景1的下方高出绕到场景3,门会打开,进入前最好召唤出火精灵,将开关设置为左右右,跳下去开门,来到左1开门,却异常凶险,此时还过不去?那是用来召唤绿精灵的。 进入第1场景,很容易发现,通过漩涡,可以用分身术看到皇宫门前的影藏光点,其中一个还没法拿到,蹲下进入,向左上开门进入第4场景,在他的统治下,一直向左走,也是最西北方了,小心那个吸SP的怪物,里面有些诡异,否则会损失较多HP,和一旁的公主对话可加满HP。干掉红龙后,建议事先召唤出火精灵,要想近身只有通过旋转移动的石板,首先是场景1,左侧石门会打开(召唤出火精灵,再往左过了一个场景后跳下来到场景5,还是可以轻松拿到的,来到封印密室,来到宫殿的右侧阳台,回到第3场景开门进入第4场景,再通过移动石板来到左下方,拿钥匙点灯,看到那水滴了吗,进入右面的门来到第4场景,冲上来一个重装锤兵,你将不能召唤精灵,对水召唤水精灵灭火,解决后石门会打开、火,两侧掉下两只宝箱,别急着开门,向下走看到水宫殿,被其打入要塞底部,用先前第2场景右房间的钥匙打开门,用弓箭将机关打开以此开门,这对新手很有帮助?又是一个隐藏的洞穴,进入来到第2场景的阳台,会拿到葡萄,点灯,那里同样也有一个光点是用来返回精灵界的…… 进入最后的场景后,打开红门后进入精灵宫殿。上楼梯打开右侧门进入,全部烧死,会发现有两处立足点。消灭所有怪物后得到最后的第15块火焰石,走出隐藏洞穴。别急着开门进去,在这里,可得到100次铁弓,继承了王位,走到皇宫右侧,向右走,BOSS是一个会喷出火焰的魔头,第1场景要注意干掉第一波枪兵后,向右走上楼梯,干掉他,向左进入火山最后场景,向右走,将两只铁球压住两只机关,走到最上方消灭三条爪虫后得到第14块火焰石,在到精灵洞穴的途中可以很简单的拿到第12块黑耀石和第9块绿宝石,召唤出影精灵后回到右2勾过去拿到钥匙,注意,来到桥处,那只要两箭,向上走,于是蹲下进入,在灭火后来到最后场景,原来是一个瀑布通道MD经典游戏 《光之继承者》下载链接<a href="http://www4,装备毁灭之剑或火炎剑,向右开门来到右一场景,撞开后进入漩涡来到左面山上的宝箱旁,回到主场景,这里可以拿到复活药,回到要塞的出发点,打开后进入到西侧高处一宝箱旁,此时会碰到僵尸大军,如此反复,用影精灵分身术,来到码头前宫殿内,将其完全消灭后右侧的石门会打开,此处可拿到红色主钥匙(奏乐),干掉吸SP的怪物后向左来到第4场景,正门已锁上,进入后踩机关,这里有很多老鼠是杀不光的,门会打开,装备毁灭之剑,第1块绿宝石,在海岸上右上方的宝箱此时还拿不到,这里的石门暂时不开,将两只恐龙消灭后,这是游戏的第一次遇敌,是第10块绿宝石
其他类似问题
为您推荐:
其他3条回答
帮楼上的补充点小内容
光之继承者(MD)秘诀&绝招&特技&隐藏物品&隐藏时空之匙点
观看成绩等级排行榜:
标题画面时同时按START和B键即可
重斩:按住B键不放,然后松开
前冲重斩:按前、前快跑后,按B键
直冲斩:连按同一方向三次后,按B键
回旋斩:方向键转一圈后,按B键
跳身回旋斩:按前、后、前,按B键
连续跳身回旋斩(手持小刀,不易成功):方向键转一圈、后、前,按B键
隐藏超杀七连斩(手持长剑,不易成功):同上
当解放封印的精灵后,就可以用腕轮照射与精灵属性相同的物品来召唤精灵,或者使用召唤精灵的道具来召唤。
把召唤精灵的宝物放在地上用腕轮射击,不但可以召唤出精灵,还可以使这些宝物变成火焰剑、生命水瓶等东西...
光之继承者,很多网站都有的下
您可能关注的推广
世嘉游戏的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁2172人阅读
项目实战(8)
Cocos2d-X(64)
实现一个躲蜘蛛的游戏,具备以下效果:
1.玩家精灵在游戏的最下方。
2.蜘蛛精灵在游戏的最上方,并且从上往下掉落。
3.手动控制玩家精灵。
4.碰撞检测,如果玩家精灵碰到蜘蛛则重玩。
5.音效的设置。
6.Loading界面
7.暂停和开始的设计
代码实现:
1.创建默认的HelloWorld项目,屏幕默认的是横屏的,如何设置屏幕为竖屏?
找到RootViewController.mm文件,修改相应的代码即可:
// For ios6, use supportedInterfaceOrientations & shouldAutorotate instead
- (NSUInteger) supportedInterfaceOrientations{
#ifdef __IPHONE_6_0
return UIInterfaceOrientationMaskP
2.HelloWorldScene.h:
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__
#include &cocos2d.h&
using namespace cocos2d;
class HelloWorld : public cocos2d::CCLayer
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
// there's no 'id' in cpp, so we recommend to return the class instance pointer
static cocos2d::CCScene* scene();
// a selector callback
//void menuCloseCallback(CCObject* pSender);
// preprocessor macro for &static create()& constructor ( node() deprecated )
CREATE_FUNC(HelloWorld);
~HelloWorld();
CCLabelBMFont * scoreL
//玩家自己的精灵
CCPoint playerV
//蜘蛛精灵
//时间间隔
float spiderMoveD
//蜘蛛移动的数量
int numSpidersM
//初始化蜘蛛
void initSpiders();
//重新布局蜘蛛精灵
void resetSpiders();
//蜘蛛更新
void spidersUpdate(CCTime delta);
//蜘蛛移动
void runSpiderMoveSequence(CCSprite * spider);
//往下移动
void spiderBelowSceen(void * sender);
//碰撞检测
void update(float delta);
//触摸控制主角精灵
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
//触摸注册
void registerWithTouchDispatcher();
//showGameOver
void showGameOver(const char *str);
//重新开始
void resetGame();
//开始按钮
void menuCloseCallback(CCObject* pSender);
//返回上一级选择菜单
void returnView();
bool flag =
void pauseOrStart();
#endif // __HELLOWORLD_SCENE_H__
3.HelloWorldScene.cpp:
#include &HelloWorldScene.h&
//音乐的类
#include &SimpleAudioEngine.h&
#include &Loading.h&
using namespace cocos2d;
using namespace CocosD
CCScene* HelloWorld::scene()
// 'scene' is an autorelease object
CCScene *scene = CCScene::create();
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
// add layer as a child to scene
scene-&addChild(layer);
// return the scene
// on &init& you need to initialize your instance
bool HelloWorld::init()
// 1. super init first
if ( !CCLayer::init() )
CCSize screenSize = CCDirector::sharedDirector()-&getWinSize();
CCSprite *background = CCSprite::create(&bg.png&);
background-&setPosition(ccp(screenSize.width/2, screenSize.height/2));
this-&addChild(background);
//字体文理贴图
scoreLabel = CCLabelBMFont::create(&0&, &testBMFont.fnt&);
scoreLabel-&setPosition(ccp(screenSize.width * 0.5,screenSize.height * 0.5));
this-&addChild(scoreLabel);
//放大两倍
//scoreLabel-&getChildByTag(0)-&setScale(2.0);
//背景音效
SimpleAudioEngine::sharedEngine()-&playBackgroundMusic(&blues.mp3&, true);
//打开加速计
this-&setAccelerometerEnabled(true);
this-&setTouchEnabled(true);
//获取自身的精灵
player = CCSprite::create(&alien.png&);
this-&addChild(player, 0,1);
float imageHeight = player-&getTexture()-&getContentSize().
//将玩家精灵添加到屏幕的下方正中央
player-&setPosition(CCPointMake(screenSize.width/2, imageHeight/2));
//调用加载蜘蛛精灵的方法
this-&initSpiders();
//this-&scheduleUpdate();
//初始化蜘蛛
void HelloWorld::initSpiders()
CCSize size = CCDirector::sharedDirector()-&getWinSize();
CCSprite *tempSpider = CCSprite::create(&spider.png&);
//获取蜘蛛贴图的宽度
float imageWidth = tempSpider-&getContentSize().
//计算一行能显示几个蜘蛛
int numSpiders = size.width / imageW
spiders = new CCArray();
//设置一个断言
CCAssert(spiders -& init(), &spiders array is already initialized!&);
spiders = CCArray::createWithCapacity(numSpiders); //数组重复初始化了
for (int i = 0 ; i & numS i&#43;&#43;)
CCSprite *spider = CCSprite::create(&spider.png&);
this-&addChild(spider, 0, 2);
spiders-&addObject(spider);
//暂停按钮
CCMenuItemImage *pPauseItem = CCMenuItemImage::create(
&CloseNormal.png&,
&CloseSelected.png&,
menu_selector(HelloWorld::pauseOrStart));
pPauseItem-&setPosition( ccp(CCDirector::sharedDirector()-&getWinSize().width - 20, 20) );
CCMenu* pMenu = CCMenu::create(pPauseItem, NULL);
pMenu-&setPosition( CCPointZero );
pMenu-&alignItemsHorizontally();
this-&addChild(pMenu, 1,105);
//写一个方法,将蜘蛛移动到其他位置,不然默认的创建的几个蜘蛛精灵就是创建在原点上
this-&resetSpiders();
this-&scheduleUpdate();
//重新布局蜘蛛代码
void HelloWorld::resetSpiders()
count = 0;
//获取屏幕尺寸
CCSize size = CCDirector::sharedDirector()-&getWinSize();
//获取蜘蛛尺寸
CCSprite *tempSpider = (CCSprite *)spiders-&lastObject();
CCSize imageSize = tempSpider-&getContentSize();
int numSpiders = spiders-&count();
for (int i=0; i&numS i&#43;&#43;) {
CCSprite *spider = (CCSprite *)spiders-&objectAtIndex(i);
spider-&setPosition(CCPointMake(imageSize.width * i &#43; imageSize.width *0.5f,size.height &#43; imageSize.height));
//将所有的蜘蛛的动作都停止
spider-&stopAllActions();
this-&unschedule(schedule_selector(HelloWorld::spidersUpdate));
this-&schedule(schedule_selector(HelloWorld::spidersUpdate), 0.6f);
//this-&schedule(schedule_selector(HelloWorld::spidersUpdate), 0.6f);
numSpidersMoved = 0;
spiderMoveDuration = 3.0f; //从上到下多长时间运行结束
//this-&scheduleUpdate();
//更新蜘蛛
void HelloWorld::spidersUpdate(cocos2d::CCTime delta)
for (int i=0; i & spiders-&count(); i&#43;&#43;)
int randomSpiderIndex = CCRANDOM_0_1()*spiders-&count();
CCSprite * spider = (CCSprite *)spiders-&objectAtIndex(randomSpiderIndex);
//注意:这个方法表示当前对象是否有动作正在执行
if (spider-&numberOfRunningActions() == 0)
if (i & 0)
CCLog(&Dropping a Spider after %d retries.&,i);
this-&runSpiderMoveSequence(spider);
//蜘蛛移动
void HelloWorld::runSpiderMoveSequence(cocos2d::CCSprite *spider)
numSpidersMoved&#43;&#43;;
//控制难度
if (numSpidersMoved %8 == 0 && spiderMoveDuration & 2.0f) {
spiderMoveDuration -= 0.1f;
CCPoint belowScreenPosition = CCPointMake(spider-&getPosition().x, -(spider-&getTexture()-&getContentSize().height));
CCMoveTo *move = CCMoveTo::create(spiderMoveDuration, belowScreenPosition);
CCCallFuncN *call = CCCallFuncN::create(this,callfuncN_selector(HelloWorld::spiderBelowSceen));
CCSequence *sequence = CCSequence::create(move,call,NULL);
spider-&runAction(sequence);
//作为回调方法,当蜘蛛运动到屏幕下方的时候,从新返回到顶部
void HelloWorld::spiderBelowSceen(void *sender)
//CCAssert(dynamic_cast&CCSprite *&(this-&getChildByTag(3))!=NULL, &非法类型&);
CCSprite * spider = (CCSprite*)
CCPoint pos = spider-&getPosition();
CCSize size = CCDirector::sharedDirector()-&getWinSize();
pos.y = size.height&#43;spider-&getTexture()-&getContentSize().
spider-&setPosition(pos);
HelloWorld::~HelloWorld()
spiders-&release();
CCLog(&资源已经回收&);
//参数是固定的是每隔一桢间隔的时间的意思,也就是update函数每针都会调用
void HelloWorld::update(float delta)
float playerImageSize = player-&getContentSize().
CCSprite *sp = (CCSprite *)spiders-&lastObject();
float spiderImageSize = sp-&getContentSize().
float playerCollisionRadius = playerImageSize * 0.4f;
float spiderCollisionRadius = spiderImageSize * 0.4f;
float maxCollisionDistance = playerCollisionRadius &#43; spiderCollisionR
int numSpiders = spiders-&count();
//显示分数
scoreLabel-&setString(CCString::createWithFormat(&%d&,count)-&getCString());
for (int i = 0; i& numS i&#43;&#43;)
CCSprite * spider = (CCSprite *)spiders-&objectAtIndex(i);
if (spider-&numberOfRunningActions()==0)
//ccpDistance计算两点之间的距离函数
float actualDistance = ccpDistance(player-&getPosition(), spider-&getPosition());
if (actualDistance& maxCollisionDistance) {
//主角精灵死亡音效
SimpleAudioEngine::sharedEngine()-&playEffect(&alien-sfx.caf&);
//重新加载
this-&resetSpiders();
const char *str = &GameOver!&;
this-&showGameOver(str);
//CCDirector::sharedDirector()-&stopAnimation();
CCSprite *
//让屏幕停止 除了GameOver字体
this-&unschedule(schedule_selector(HelloWorld::spidersUpdate));
this-&unscheduleUpdate();
count&#43;&#43;;
//单点触摸
bool HelloWorld:: ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
//触摸移动
void HelloWorld:: ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
player-&setPosition(pTouch-&getLocation());
void HelloWorld:: ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
//this-&resetGame();
//CCDirector::sharedDirector()-&startAnimation();
//触摸注册事件
void HelloWorld:: registerWithTouchDispatcher()
CCDirector::sharedDirector()-&getTouchDispatcher()-&addTargetedDelegate(this, 0, true);
//显示游戏结束
void HelloWorld::showGameOver(const char *str)
//清除暂停按钮
this-&removeChildByTag(105, true);
CCSize screenSize = CCDirector::sharedDirector()-&getWinSize();
CCLabelTTF * gameOver = CCLabelTTF::create(str, &Marker Felt&, 60);
gameOver-&setPosition(ccp(screenSize.width / 2, screenSize.height / 3));
this-&addChild(gameOver,100,100);
// game over label runs 3 different actions at the same time to create the combined effect
// 1) 颜色渐变
CCTintTo * tint1 = CCTintTo::create(2, 255, 0, 0);
CCTintTo * tint2 = CCTintTo::create(2, 255, 255, 0);
CCTintTo * tint3 = CCTintTo::create(2, 0, 255, 255);
CCTintTo * tint4 = CCTintTo::create(2, 0, 0, 255);
CCTintTo * tint5 = CCTintTo::create(2, 255, 0, 255);
CCTintTo * tint6 = CCTintTo::create(2, 0, 255, 0);
CCSequence* tintSequence = CCSequence::create(tint1,tint2,tint3,tint4,tint5,tint6,NULL);
CCRepeatForever* repeatTint = CCRepeatForever::create(tintSequence);
gameOver-&runAction(repeatTint);
// 2) 缓缓旋转
CCRotateTo* rotate1 = CCRotateTo::create(2, 3);
CCEaseBounceInOut*bounce1 = CCEaseBounceInOut::create(rotate1);
CCRotateTo* rotate2 = CCRotateTo::create(2, -3);
CCEaseBounceInOut*bounce2 = CCEaseBounceInOut::create(rotate2);
CCSequence* rotateSequence = CCSequence::create(bounce1,bounce2,NULL);
CCRepeatForever* repeateBounce = CCRepeatForever::create(rotateSequence);
gameOver-&runAction(repeateBounce);
// 3) jumping
CCJumpBy* jump = CCJumpBy::create(3, CCPointZero, screenSize.height/3, 1);
CCRepeatForever* repeatJump = CCRepeatForever::create(jump);
gameOver-&runAction(repeatJump);
//提醒继续游戏
CCLabelTTF*touchLabel = CCLabelTTF::create(&请按下面按钮(继续挑战/返回上级)&, &Arial&, 20 );
touchLabel-&setPosition(CCPointMake(screenSize.width/2,screenSize.height/2 &#43; 180));
touchLabel-&setColor(ccRED);
this-&addChild(touchLabel,100,101);
CCMenuItemImage *pStartItem = CCMenuItemImage::create(
&CloseNormal.png&,
&CloseSelected.png&,
menu_selector(HelloWorld::menuCloseCallback) );
pStartItem-&setPosition( ccp(CCDirector::sharedDirector()-&getWinSize().width/2 - 70, CCDirector::sharedDirector()-&getWinSize().height / 2 &#43;120) );
CCMenuItemImage *pReturnItem = CCMenuItemImage::create(
&CloseNormal.png&,
&CloseSelected.png&,
menu_selector(HelloWorld::returnView) );
pReturnItem-&setPosition( ccp(CCDirector::sharedDirector()-&getWinSize().width/2 &#43; 70, CCDirector::sharedDirector()-&getWinSize().height / 2 &#43; 120) );
// create menu, it's an autorelease object
CCMenu* pMenu = CCMenu::create(pStartItem,pReturnItem, NULL);
pMenu-&setPosition( CCPointZero );
pMenu-&alignItemsHorizontally();
this-&addChild(pMenu, 1,102);
//重新开始
void HelloWorld::menuCloseCallback(CCObject* pSender)
//添加暂停按钮
CCMenuItemImage *pPauseItem = CCMenuItemImage::create(
&CloseNormal.png&,
&CloseSelected.png&,
menu_selector(HelloWorld::pauseOrStart));
pPauseItem-&setPosition( ccp(CCDirector::sharedDirector()-&getWinSize().width - 20, 20) );
CCMenu* pMenu = CCMenu::create(pPauseItem, NULL);
pMenu-&setPosition( CCPointZero );
pMenu-&alignItemsHorizontally();
this-&addChild(pMenu, 1,105);
this-&HelloWorld::resetGame();
this-&scheduleUpdate();
this-&schedule(schedule_selector(HelloWorld::spidersUpdate),0.6f);
void HelloWorld::resetGame()
this-&removeChildByTag(100, true);
this-&removeChildByTag(101, true);
this-&removeChildByTag(102, true);
//重新开始排列蜘蛛精灵
this-&resetSpiders();
this-&scheduleUpdate();
//返回上级
void HelloWorld::returnView()
CCTransitionFade * secondScene = CCTransitionFade::create(0.5f, Loading::scene(), ccBLACK);
CCDirector::sharedDirector()-&replaceScene(secondScene);
//暂停或者开始
void HelloWorld::pauseOrStart()
if (flag) {
CCDirector::sharedDirector()-&stopAnimation();
CCDirector::sharedDirector()-&startAnimation();
4.导航页面的设计
4.1 Loading.h:
Created by 丁小未 on 13-9-6.
#ifndef __GameDemo__Loading__
#define __GameDemo__Loading__
#include &iostream&
#include &cocos2d.h&
using namespace cocos2d;
class Loading : public cocos2d::CCLayer
virtual bool init();
static cocos2d::CCScene* scene();
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
//void makeTransition();
void convertView();
virtual void registerWithTouchDispatcher(void);
virtual void onEnter();
virtual void onExit();
//游戏介绍
void gameIntroduce();
//游戏设置
void gameSetting();
//游戏开始
void gameBegging();
CREATE_FUNC(Loading);
#endif /* defined(__GameDemo__Loading__) */
4.2Loading.m:
#include &Loading.h&
#include &SimpleAudioEngine.h&
#include &HelloWorldScene.h&
using namespace cocos2d;
using namespace CocosD
CCScene* Loading::scene()
CCScene *scene = CCScene::create();
Loading *layer = Loading::create();
scene-&addChild(layer);
bool Loading::init()
if ( !CCLayer::init() )
this-&setTouchEnabled(true);
void Loading::gameIntroduce()
CCLog(&introduce&);
void Loading::gameSetting()
CCLog(&gamesetting&);
void Loading::gameBegging()
this-&Loading::convertView();
void Loading::onEnter()
CCLayer::onEnter();
CCSize size = CCDirector::sharedDirector()-&getWinSize();
CCSprite *background = CCSprite::create(&bg.png&);
background-&setPosition(ccp(size.width/2, size.height/2));
this-&addChild(background);
CCLabelTTF *label = CCLabelTTF::create(&躲避蜘蛛游戏&, &Marker Felt&, 48);
label-&setPosition(ccp(size.width/2, size.height - 100));
label-&setColor(ccGREEN);
this-&addChild(label);
CCMenuItemImage * button = CCMenuItemImage::create(&play.png&, &play.png&, this, menu_selector(Loading::gameBegging));
button-&setPosition(size.width/2,size.height/2-80);
CCLabelTTF *labell = CCLabelTTF::create(&游戏概况&, &Marker Felt&, 34);
CCMenuItemLabel *mlabel = CCMenuItemLabel::create(labell,this,menu_selector(Loading::gameIntroduce));
mlabel-&setPosition(CCPointMake(size.width/2, size.height/2 &#43; 75));
mlabel-&setColor(ccBLUE);
CCLabelTTF *labell1 = CCLabelTTF::create(&游戏设置&, &Marker Felt&, 34);
CCMenuItemLabel *mlabel1 = CCMenuItemLabel::create(labell1,this,menu_selector(Loading::gameSetting));
mlabel1-&setPosition(CCPointMake(size.width/2, size.height/2 &#43; 15));
mlabel1-&setColor(ccBLUE);
CCMenu *menu = CCMenu::create(button,mlabel,mlabel1,NULL);
menu-&setPosition(CCPointZero);
this-&addChild(menu);
Loading::onExit()
CCLayer::onExit();
CCLog(&结束&);
void Loading::registerWithTouchDispatcher()
CCDirector::sharedDirector()-&getTouchDispatcher()-&addTargetedDelegate(this, 0, true);
bool Loading::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent)
CCPoint point = pTouch-&getLocation();
CCLog(&%f,%f&,point.x,point.y);
void Loading::convertView()
CCTransitionFade * secondScene = CCTransitionFade::create(0.5f, HelloWorld::scene(), ccBLACK);
CCDirector::sharedDirector()-&replaceScene(secondScene);
1.获取图片的高度
float imageHeight =player-&getTexture()-&getContentSize().height;
2.断言的设置
CCAssert(dynamic_cast&CCSprite *&(this-&getChildByTag(3))!=NULL, &非法类型&);
3.设置屏幕刷新的频率
找到AppController.mm文件,找到- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions这个方法
然后添加:
//设置刷新频率
cocos2d::CCApplication::sharedApplication()-&setAnimationInterval(0.3);
就能使得屏幕刷新变慢,然后方便调试
cocos2d介绍[转]:
一、游戏介绍
这个例子是一个叫做Doodle Drop的游戏,是一个重力感应类游戏。玩家操纵角色来躲避从空中坠落的障碍物。游戏界面如下:
二、设置主场景
1、新建Cocos2d Application,工程名DoodleDrop。
2、游戏主场景。选File -& new file,选择User Templates -& Cocos2d.0.99.x -& CCNode.class。Subclass Of选择CCLayer。文件名选GameScene。
3、在头文件中声明静态方法 &#43;(id)
#import &GameScene.h&
@implementation GameScene
&#43;(id) scene {
CCScene *scene = [CCScene node];
CCLayer* layer = [GameScene node];
[scene addChild:layer];
-(id) init {
if ((self = [super init])) {
CCLOG(@&%@: %@&, NSStringFromSelector(_cmd), self);&
-(void) dealloc {
// never forget to call [super dealloc] [super dealloc];
CCLOG(@&%@: %@&, NSStringFromSelector(_cmd), self);
[super dealloc];
5、删除HelloWorldScene.h和HelloWorldScene.m文件。
6、修改DoodleDropAppDelegate.m,将其中的主场景启动代码修改为GameScene:
[[CCDirector sharedDirector] runWithScene: [GameScene scene]];
三、游戏角色
1&、把玩家角色图片&alien.png&添加到工程。添加时,选中“&Copy items&”,同时勾选“&add to targets”中的“&DoodleDrop&”选项。
2&、在游戏主场景&(GameScene.h)&增加变量声明:
3、在游戏主场景(GameScene.m)的init方法中加入下列代码:
self.isAccelerometerEnabled = YES;
player = [CCSprite spriteWithFile:@&alien.png&];
[self addChild:player z:0 tag:1];
CGSize screenSize = [[CCDirector sharedDirector] winSize];
&&float imageHeight = [player texture].contentSize.
player.position = CGPointMake(screenSize.width / 2, imageHeight / 2);
这样,玩家角色就被放到屏幕底部正中的位置上。注意,player变量未retain。因为addChild会自动retain。
[player texture].contentSize.height返回的是渲染图的content size。渲染对象(玩家角色图片alient.png)有两个尺寸:content size和texture size。前者是图片的实际尺寸,后者是渲染尺寸——iPhone规定渲染尺寸只能是2的n次方。比如图片实际尺寸100*100,那么渲染尺寸则是128*128,因为最接近100的2的n次方为128。
四、使用加速器
1、为了响应加速器事件,你必须在init方法中加上:
self.isAccelerometerEnabled = YES;
同时实现accelerometer方法:
-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
CGPoint pos = player.
&&pos.x &#43;= acceleration.x * 10;
player.position =
跟java和c不同。你不能对&player.position.x进行赋&#20540;。这种赋&#20540;在
c语言中是可以的,但oc中不行。因为player.position实际上是调用[player position],这个方法返回一个临时的CGPoint变量。当你想对这个临时的CGPoint的x进行赋&#20540;后,这个变量会被被抛弃,所以你的赋&#20540;没有任何作用。所以你需要用一个新的CGPoint变量,修改其x&#20540;,然后再把这个CGPoint赋&#20540;给player.position(即调用[player setPosition:])。如果你是来自java和c&#43;&#43;的程序员,在oc中需要留心这个“不幸的”问题并尽可能的修改编程习惯。
2、运行测试
模拟器不支持重力感应,请在物理设备上运行代码。
五、玩家控制
现住发现用加速器控制有些不灵?反应迟钝,移动也不流畅?为此,我们需要增加一些代码。
首先需要增加变量声明:
CGPoint playerV
为了便于今后的扩展(假设有一天我们会想上下移动角色),这是一个CGPoint类型,而不是一个float。
然后修改加速器方法:
-(void) accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration
// 减速度系数(&#20540;越小=转向越快)
float deceleration = 0.4f;
// 加速度系数 (&#20540;越大 = 越敏感)
float sensitivity = 6.0f;
// 最大速度
float maxVelocity = 100;
// 根据加速度计算当前速度
&&playerVelocity.x = playerVelocity.x * deceleration &#43;&acceleration.x *
// 限制最大速度为&±maxVelocity之间
&&directions if (playerVelocity.x & maxVelocity) {
playerVelocity.x = maxV
} else if (playerVelocity.x & - maxVelocity) {
playerVelocity.x = - maxV
现在,玩家速度由一个一次线性方程决定:
V= V&?&* β &#43; V&?&* ε
V&?&为初速
β&&&&&为减速系数
V&?&为加速度
ε&为加速系数
其中,&β 和&ε两个系数(即减速度系数和加速度系数:deceleration和sensitivity变量)是两个经验&#20540;,你可以自己调整它以达到理想效果。
然后,需要通过以下方法来改变游戏角色的位置:
-(void) update:(ccTime)delta {
// 不断改变角色x坐标
&&CGPoint pos = player.
pos.x &#43;= playerVelocity.x;
// 防止角色移到屏幕以外
&&CGSize screenSize = [[CCDirector sharedDirector] winSize];
float imageWidthHalved = [player texture].contentSize.width *&0.5f; float leftBorderLimit = imageWidthH
float rightBorderLimit = screenSize.width - imageWidthH
if (pos.x & leftBorderLimit) {
pos.x = leftBorderL
playerVelocity = CGPointZ
} else if(pos.x & rightBorderLimit) {
pos.x = rightBorderL
playerVelocity = CGPointZ
player.position =
然后,在init方法中加入:
[self scheduleUpdate];
这样,每隔一段时间cocos2d会自动调用update方法。
六、添加障碍物
导入spider.png图片到工程。这是一张蜘蛛的图片,在游戏中我们需要躲避的东西。
首先,增加如下变量声明:
float spiderMoveD
&&int numSpidersM
在init方法中,加上一句方法调用语句:
[self initSpiders];
下面是initSpiders方法:
CGSize screenSize = [[CCDirector sharedDirector] winSize];
// 用一个临时的CCSprider取得图片宽度
CCSprite* tempSpider = [CCSprite spriteWithFile:@&spider.png&];&float imageWidth = [tempSpider texture].contentSize.
// 计算出要多少蜘蛛图片可以布满屏幕的宽度
int numSpiders = screenSize.width / imageW
// 初始化数组并指定数组大小
spiders = [[CCArray alloc] initWithCapacity:numSpiders];
for (int i = 0; i & numS i&#43;&#43;) {
CCSprite* spider = [CCSprite spriteWithFile:@&spider.png&];&[self&addChild:spider z:0 tag:2];
[spiders addObject:spider];
[self resetSpiders];
tempSpider是一个临时变量,我们仅用于取得图片宽度。我们没有retain他,也不需要release他——他会自动被release。
与此相反,spiders是由我们init的,我们也没有retain(实际上init会自动retain),但我们必须自己release(OC规定,init/copy/new出来的对象,必须手动release,OC的内存管理不会自动release)。因此在dealloc方法中有这么一句:
[spiders release],spiders=
同时,我们使用了coco2d提供的一个类&#20284;NSMutableArray的CCArray类,该类对数组的操作更快。以下是CCArray提供的一些方法:
&#43; (id)
&#43; (id) arrayWithCapacity:(NSUInteger)
&#43; (id) arrayWithArray:(CCArray*)otherA
&#43; (id) arrayWithNSArray:(NSArray*)otherA
- (id) initWithCapacity:(NSUInteger)
&&- (id) initWithArray:(CCArray*)otherA
- (id) initWithNSArray:(NSArray*)otherA
- (NSUInteger)
- (NSUInteger)
- (NSUInteger) indexOfObject:(id)
&&- (id) objectAtIndex:(NSUInteger)
- (id) lastO
- (BOOL) containsObject:(id)
#pragma mark Adding Objects
- (void) addObject:(id)
- (void) addObjectsFromArray:(CCArray*)otherA
&&- (void) addObjectsFromNSArray:(NSArray*)otherA
- (void) insertObject:(id)object atIndex:(NSUInteger)
#pragma mark Removing Objects
- (void) removeLastO
- (void) removeObject:(id)
&&- (void) removeObjectAtIndex:(NSUInteger)
- (void) removeObjectsInArray:(CCArray*)otherA
- (void) removeAllO
- (void) fastRemoveObject:(id)
- (void) fastRemoveObjectAtIndex:(NSUInteger)
- (void) makeObjectsPerformSelector:(SEL)aS
- (void) makeObjectsPerformSelector:(SEL)aSelector withObject:(id)
- (NSArray*) getNSA
resetSpiders 方法如下所示:
-(void) resetSpiders {
CGSize screenSize = [[CCDirector sharedDirector] winSize];
// 用一个临时的CCSprider取得图片宽度
CCSprite* tempSpider = [spiders lastObject];
CGSize size = [tempSpider texture].contentS
int numSpiders = [spiders count];
for (int i = 0; i & numS i&#43;&#43;) {
// 放置每个蜘蛛的位置
CCSprite* spider = [spiders objectAtIndex:i];
spider.position =
CGPointMake(size.width * i &#43; size.width * 0.5f,
screenSize.height &#43; size.height);
[spider stopAllActions];
// 为保险起见,在注册之前先从schedule中反注册(未注册则不动作)
[self unschedule:@selector(spidersUpdate:)];
// 注册schedule,每0.7秒执行
[self schedule:@selector(spidersUpdate:) interval:0.7f];
&&// 找出空闲的蜘蛛(未在移动的).
&&for (int i = 0; i & 10; i&#43;&#43;) {
&&&&// 从数组中随机抽取一只蜘蛛
&&&&int randomSpiderIndex = CCRANDOM_0_1() * [spiders count];
&&&&CCSprite* spider = [spiders objectAtIndex:randomSpiderIndex];
&&&&// 若蜘蛛未在移动,让蜘蛛往下掉
&&&&if ([spider numberOfRunningActions] == 0) {
&&&&&&// 控制蜘蛛往下掉
&&&&&&[self runSpiderMoveSequence:spider];
&&&&&&&// 每次循环仅移动一只蜘蛛
-(void) runSpiderMoveSequence:(CCSprite*)spider
&&// 随时间逐渐加快蜘蛛的速度
&&numSpidersMoved&#43;&#43;;
&&if (numSpidersMoved % 8 == 0 && spiderMoveDuration & 2.0f) {
&&&&spiderMoveDuration -= 0.1f;
// 移动的终点
CGPoint belowScreenPosition = CGPointMake(spider.position.x,
-[spider texture].contentSize.height);
// 动作:移动
&&CCMoveTo* move = [CCMoveTo actionWithDuration:spiderMoveDuration
position:belowScreenPosition];
// 瞬时动作:方法调用
CCCallFuncN* call = [CCCallFuncN actionWithTarget:self
selector:@selector(spiderBelowScreen:)];
// 组合动作:移动&#43;方法调用
CCSequence* sequence = [CCSequence actions:move, call, nil];
// 运行组合动作
[spider runAction:sequence];
spiderBelowScreen方法重置蜘蛛的状态,让其回到屏幕上端等待下次坠落。
-(void) spiderBelowScreen:(id)sender {
// 断言:sender是否为CCSprite.
&&NSAssert([sender isKindOfClass:[CCSprite class]], @&sender is not a CCSprite!&);
CCSprite* spider = (CCSprite*)
// 把蜘蛛重新放回屏幕上端
CGPoint pos = spider.
CGSize screenSize = [[CCDirector sharedDirector] winSize];
pos.y = screenSize.height &#43; [spider texture].contentSize. spider.position =
书中作者提到,出于一个“保守”程序员的习惯,作者使用了&NSAssert语句来测试sender是否是一个CCSprite类。虽然理论上,Sender应当是一个CCSprite,实际上它却有可能根本不是。 因为作者曾犯过一个错误:把CCCallFuncN写成了CCCallFunc(二者的区别在于,后者不能传递参数而前者带一个sender参数),导致sender未被作为参数传递到调用方法,即sender=nil。这样的错误也被NSAssert捕获到了,于是作者发现并修改了这个错误。
七、碰撞检测
很简单。在update方法中添加语句:
[self checkForCollision];
checkForCollision中包含了碰撞检测的所有逻辑:
-(void ) checkForCollision {
// 玩家和蜘蛛的尺寸
float playerImageSize = [player texture].contentSize.
float spiderImageSize = [[spiders lastObject] texture].contentSize.
//玩家和蜘蛛的碰撞半径
float playerCollisionRadius = playerImageSize * 0.4f;
float spiderCollisionRadius = spiderImageSize * 0.4f;
// 发生碰撞的最大距离,如果两个对象间的距离&=此距离可判定为有效碰撞
float maxCollisionDistance=playerCollisionRadius &#43;spiderCollisionR
int numSpiders = [spiders count];
//循环检测玩家和每一只蜘蛛间的碰撞距离
for (int i = 0; i & numS i&#43;&#43;) {
&&CCSprite* spider = [spiders objectAtIndex:i];
&&// 计算每只蜘蛛和玩家间的距离. ccpDistance及其他非常有用的函数都列在&CGPointExtension中
&&float actualDistance =&&&ccpDistance(player.position, spider.position);
&&// 如二者距离小于碰撞最大距离,认为发生碰撞?
&&if (actualDistance & maxCollisionDistance) {
&&&&// 结束游戏.
&&&&[self showGameOver];
-(void) showGameOver
// 屏保开启
[self setScreenSaverEnabled:YES];
// 冻结所有对象的动作
CCARRAY_FOREACH([self children], node)&{
[node stopAllActions];
// 使蜘蛛保持扭动
CCARRAY_FOREACH(spiders, spider)&{
[self runSpiderWiggleSequence:spider];
// 游戏开始前,关闭加速器的输入
self.isAccelerometerEnabled = NO;
// 允许触摸
self.isTouchEnabled = YES;
// 取消所有schedule
[self unscheduleAllSelectors];
// 显示GameOver文本标签
CGSize screenSize = [[CCDirector sharedDirector] winSize];
CCLabel* gameOver = [CCLabel labelWithString:@&GAME OVER!& fontName:@&Marker Felt& fontSize:60];
gameOver.position = CGPointMake(screenSize.width / 2, screenSize.height / 3);
[self addChild:gameOver z:100 tag:100];
// 动作:色彩渐变
CCTintTo* tint1 = [CCTintTo actionWithDuration:2 red:255 green:0 blue:0];
CCTintTo* tint2 = [CCTintTo actionWithDuration:2 red:255 green:255 blue:0];
CCTintTo* tint3 = [CCTintTo actionWithDuration:2 red:0 green:255 blue:0];
CCTintTo* tint4 = [CCTintTo actionWithDuration:2 red:0 green:255 blue:255];
CCTintTo* tint5 = [CCTintTo actionWithDuration:2 red:0 green:0 blue:255];
CCTintTo* tint6 = [CCTintTo actionWithDuration:2 red:255 green:0 blue:255];
CCSequence* tintSequence = [CCSequence actions:tint1, tint2, tint3, tint4, tint5, tint6, nil];
CCRepeatForever* repeatTint = [CCRepeatForever actionWithAction:tintSequence];
[gameOver runAction:repeatTint];
// 动作:转动、颤动
CCRotateTo* rotate1 = [CCRotateTo actionWithDuration:2 angle:3];
CCEaseBounceInOut* bounce1 = [CCEaseBounceInOut actionWithAction:rotate1];
CCRotateTo* rotate2 = [CCRotateTo actionWithDuration:2 angle:-3];
CCEaseBounceInOut* bounce2 = [CCEaseBounceInOut actionWithAction:rotate2];
CCSequence* rotateSequence = [CCSequence actions:bounce1, bounce2, nil];
CCRepeatForever* repeatBounce = [CCRepeatForever actionWithAction:rotateSequence];
[gameOver runAction:repeatBounce];
// 动作:跳动
CCJumpBy* jump = [CCJumpBy actionWithDuration:3 position:CGPointZero height:screenSize.height / 3 jumps:1];
CCRepeatForever* repeatJump = [CCRepeatForever actionWithAction:jump];
[gameOver runAction:repeatJump];
// 标签:点击游戏开始
CCLabel* touch = [CCLabel labelWithString:@&tap screen to play again& fontName:@&Arial& fontSize:20];
touch.position = CGPointMake(screenSize.width / 2, screenSize.height / 4);
[self addChild:touch z:100 tag:101];
// 动作:闪烁
CCBlink* blink = [CCBlink actionWithDuration:10 blinks:20];
CCRepeatForever* repeatBlink = [CCRepeatForever actionWithAction:blink];
[touch runAction:repeatBlink];
当然,为了使游戏一开始就停顿在GameOver画面,需要在init方法中调用:
[self showGameOver];
只有当用户触摸屏幕后,游戏才会开始。这需要实现方法:
-(void) ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
[self resetGame];
resetGame方法负责重置游戏变量并启动游戏。
-(void) resetGame
// 关闭屏保
[self setScreenSaverEnabled:NO];
// 移除GameOver标签和启动游戏标签
[self removeChildByTag:100 cleanup:YES];
[self removeChildByTag:101 cleanup:YES];
// 启动加速器输入,关闭触摸输入
self.isAccelerometerEnabled = YES;
self.isTouchEnabled = NO;
// 重设蜘蛛数组
[self resetSpiders];
// 注册schedule
[self scheduleUpdate];
score = 0;
totalTime = 0;
[scoreLabel setString:@&0&];
开启/关闭屏保的方法:
-(void) setScreenSaverEnabled:(bool)enabled
UIApplication *thisApp = [UIApplication sharedApplication];
thisApp.idleTimerDisabled = !
使蜘蛛不停扭动的方法如下(实际上是把图像不断的放大缩小):
-(void) runSpiderWiggleSequence:(CCSprite*)spider
//动作:放大
CCScaleTo* scaleUp = [CCScaleTo actionWithDuration:CCRANDOM_0_1() * 2 &#43; 1 scale:1.05f];
//速度渐变动作:速度由慢至快,再由快至慢
CCEaseBackInOut* easeUp = [CCEaseBackInOut actionWithAction:scaleUp];
//动作:缩小
CCScaleTo* scaleDown = [CCScaleTo actionWithDuration:CCRANDOM_0_1() * 2 &#43; 1 scale:0.95f];
//速度渐变动作:速度由慢至快,再由快至慢
CCEaseBackInOut* easeDown = [CCEaseBackInOut actionWithAction:scaleDown];
CCSequence* scaleSequence = [CCSequence actions:easeUp, easeDown, nil];
CCRepeatForever* repeatScale = [CCRepeatForever actionWithAction:scaleSequence];
[spider runAction:repeatScale];
八、CCLabel、&CCBitmapFontAtlas 和 Hiero
我们的计分标准很简单,以游戏时间作为游戏分数。
在init方法中加入:
scoreLabel = [CCLabel labelWithString:@&0& fontName:@&Arial& fontSize:48];
scoreLabel.position = CGPointMake(screenSize.width / 2, screenSize.height);
// 调整锚点。
scoreLabel.anchorPoint = CGPointMake(0.5f, 1.0f);
// 把label添加到scene,z坐标为-1,则位于所有layer的下方
[self addChild:scoreLabel z:-1];
为了将计分牌对其到屏幕上端中心位置,这里使用了“锚点”的概念。 锚点即参考点,和position属性配合使用,用于将物体向其他物体对齐。比如当把一个物体移动到一个位置点时,实际上是把这个物体的“锚点”移动/对齐到另外一个点。锚点由两个float表示,表示的是锚点相对于物体宽/高的比率。比如锚点(0.5f,1.0f)表示该锚点位于该物体宽1/2,高1/1的地方。
修改update方法,在其中加入:
// 每秒更新一次计分牌
totalTime &#43;=
&&int currentTime = (int)totalT
if (score & currentTime)
&&score = currentT
&&[scoreLabel setString:[NSString stringWithFormat:@&%i&, score]];
这里需要说明的是,[CCLabel setString]方法的效率很低:它需要释放老的texture,分配一个新的texture,并用iOS font的rendering方法重新构造texture。你只需要注释[CCLabel&&setString]方法就可以知道,那有多么的糟糕。不使用setString方法时帧率为60帧/秒,而使用该方法的帧率竟然才30帧/秒。
象CCSprite等刷新效率高(只是更费一点内存)的Label类,都是属于&CCBitmapFontAtlas类的特例。我们可以通过简单地把CCLabel变量声明从CCLabel更改为&CCBitmapFontAtlas,并修改它的构造语句:
scoreLabel = [CCBitmapFontAtlas bitmapFontAtlasWithString:@&0& fntFile:@&bitmapfont.fnt&];
在游戏中使用bitmapfont是很好的选择,因为操作更快速,同时会有一个缺点:bitmap字体都是大小固定的。如果同样的字体,大小不同,你需要对CCBitmapFontAtlas 对象进行缩放。或者为不同尺寸的字体创建单独的bitmap文件,并因此占用更多的内存。
当然需要把bitmapfont.fnt文件和对应的.png文件一起加入到工程的资源目录下。
如果你需要创建自己的bitmap字体,可以用Hiero这个小工具(java web application):
也可以使用&BMFont (windows应用):
Hiero允许你从TrueTypeFont创建一个.fnt文件,该文件可以直接用于 cocos2d的CCBitmapFontAtlas类。
安装Hiero时需要同意一个数字签名 。请放心,迄今为止没有迹象表明该签名有任何问题。
&&Hiero的使用很简单,首先挑选一种TrueType字体,在Sample Text 文本框中输入你要用的字符,然后点击File-&Save BMFont Files…即可保存为.fnt文件。
其他的选项是可选的。比如你可以加上渐变和阴影效果,使字体显得更3D。
选择Glyph cache后,你还可以调整生成的.png文件的大小。&当然,如果你象我一样只用到了极少的几个字符,只要把页宽/高设为最小&#20540;(比如在这里我们设成了256),然后点击Reset Cache应用。这样可以创建比较小.png文件同时减少内存占用。对于更复杂的字体,Hiero会创建多个.png文件——记住,每一个.png文件都应当加到工程中。
在这个例子里,我们的字体文件里只放了几个数字。因为png文件被创建为256*256大小,不管你是输入1个字还是再加几个其他的字,都会占用这么多的空间。
*注意,如果你使用了在.fnt文件中不存在的字符,那么该字符会被忽略掉,且不会显示在&CCBitmapFontAtlas中&。
九、加入音频
在工程目录中有一对音频文件: blues.mp3 和 alien- sfx.caf 。
在cocos2d中播放音频的最好也是最初的方法是用 SimpleAudioEngine。然而音频支持并不是cocos2d内置的一部分。它属于CocosDenshion,就像物理引擎一样。因此,你需要import额外的头文件:
#import &SimpleAudioEngine.h&
然后可以在init方法中象这样来播放音乐/音频:
[[SimpleAudioEngine sharedEngine]&playBackgroundMusic:@&blues.mp3& loop:YES];
[[SimpleAudioEngine sharedEngine] preloadEffect:@&alien-sfx.caf&];
对于背景音乐,我们设置loop参数为YES,这样就会循环播放。
对于音频声效,我们并没有立即播放,而仅仅是加载到内存。然后在条件合适时播放(比如碰撞发生时):
[[SimpleAudioEngine sharedEngine] playEffect:@&alien-sfx.caf&];
对于音乐,最好使用mp3&#26684;式。注意,同一时间内,只能播放1首背景音乐。虽然同时播放多首mp3从技术上是可行的,但物理硬件在同一时间内只能对一首mp3进行解码。在游戏中拒绝任何额外的CPU开销,因此对大部分游戏而言,都不会同时播放多首mp3.
至于声效,我喜欢用CAF&#26684;式。如果要进行音频&#26684;式的转换,可以使用 SoundConverter:
/projects/ shareware/SoundConverter/
如果文件大小在500k以内,该软件是免费的,无限制的许可仅仅需要$15。
如果你发现无法播放音频文件或者出现杂音,不要担心。有无数音频软件和音频编码拥有它们特有的文件&#26684;式。有些&#26684;式无法在iOS设备上播放,然而在其他设备上播放正常。解决办法是打开它们,然后重新保存。或者使用音频转换程序或音频软件。
十、迁移至iPad
如果所有的坐标都采用屏幕坐标,在iPad的大屏上运行游戏将会进行简单缩放而没有任何问题。相反,如果采用了固定坐标,你不得不重新编写游戏代码。
迁移至iPad工程很简单。在Groups&Files面板中选择Target,选择Project-&Upgrade Current Target for iPad…,将打开对话框:
对于这个游戏,选“One Universal application”(即iPhone/iPad通用)。
这样的缺点是两个设备的特性都会被加到target,增加了程序大小。但程序既可在iPhone上运行,也可在iPad上运行。
另一个选择是“Two device-specific application”,你会得到两个独立于设备的app,你需要提交两次。如果用户有两个设备—— iPhone和iPad的,那么需要分别购买。
编译运行。程序会自动侦测当前所连接的设备类型并运行对应的版本。如图,选择iPad Simulator 3.2 ,可以查看在iPad模拟器运行游戏的效果:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1001635次
积分:14863
积分:14863
排名:第494名
原创:377篇
转载:223篇
评论:328条
我的联系方式
学习交流群 cocos2dx: unity3D:;
转载或使用本博客原创和翻译文章,请标明出外并附上链接。
阅读:7332
文章:10篇
阅读:14152
文章:13篇
阅读:11621
文章:26篇
阅读:80997
文章:14篇
阅读:17260
文章:31篇
阅读:62880
文章:35篇
阅读:44180
文章:21篇
阅读:36603
(2)(1)(1)(4)(2)(2)(1)(1)(1)(3)(1)(1)(2)(3)(1)(4)(2)(6)(17)(12)(14)(17)(12)(24)(32)(58)(42)(12)(48)(126)(33)(2)(2)(13)(9)(15)(5)(12)(14)(17)(5)(1)(1)(17)(2)(2)}

我要回帖

更多关于 精灵传说 毒蜘蛛天赋 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信