.y;
}
}
_nowChatacter.character._rival = null;
}
_nowPoint = new Point( _nowChatacter.locationX, _nowChatacter.locationY);
_characterMC = _nowChatacter.character;
_nowDirection = _characterMC.getDir();
charaToMove();
}
看,obj.nodeparent.x,obj.nodeparent.y就是之前确定好的移动位置
然后,在敌军武将移动完毕时,判断一下是不是有攻击目标
没有的话,结束行动,有的话,进入攻击状态
if(_nowChatacter.rival == null){
_nowChatacter.actionCtrl = true;
_enemyActionCtrl = 0;
_clickCtrl = "NULL";
}else{
_clickCtrl = "ATTACK";
}
addEventListener(Event.ENTER_FRAME, onEnemyFrame);
然后,在控制敌军行动事件中,加上攻击代码,和我军攻击的时候是一样的,不同的是,攻击完毕的时候,所调用的方法不一样,我方攻击的时候,需要调用鼠标点击事件,这次需要调用控制敌军行动事了
if(_clickCtrl == "ATTACK"){
removeEventListener(Event.ENTER_FRAME, onEnemyFrame);
_nowChatacter.character._fun = function(){
_clickCtrl = "NULL";
_nowChatacter.actionCtrl = true;
_enemyActionCtrl = 0;
addEventListener(Event.ENTER_FRAME, onEnemyFrame);
}
_nowChatacter.attack();
}
好了,运行下程序,可以看到敌军也会进行攻击了
当然攻击是不掉血的,嘿嘿
敌军步兵的攻击

敌军弓兵的攻击

下次,该研究掉血和掉血的时候显示一下了
作者:
klyz505 时间: 2010-5-30 19:01
又学习了,楼主请继续~~~
作者:
klyz505 时间: 2010-5-30 19:05
楼主,这是你自己开发的吗?怎么这么牛~
是否已经开发完了?能不能放出来耍耍~~看着就馋
作者:
主席 时间: 2010-5-30 19:07
flash版啊!
可以放在移动设备上玩了!
作者:
lufy 时间: 2010-5-31 09:03
因为已经写好了伤害计算,所以,要加入伤害显示就相当简单了
首先,先来让鼠标移动到敌方人物时显示伤害数值
在显示HP和MP的框架上,另外复制一个spHP,改变一下颜色与spHP区别,命名为spHP1
然后,在显示HP和MP的时候,加上伤害判断与显示,具体如下
if(_clickCtrl != "HPMP_HERT"){
if(!queryPeople){
_hpmp.visible = false;
}else{
//定义伤害数值,初始值是0
var hp2:int = 0;
_hpmp.visible = true;
_hpmp.x = _mouseBox.x - 102;
_hpmp.y = _mouseBox.y - 48;
if(_hpmp.x < 0){
_hpmp.x = 0;
}
if(_hpmp.y < 0){
_hpmp.y = 0;
}
_hpmp.txtHP.text = _character.nowHP + "/" + _character.HP;
_hpmp.spHP.width = 100 * (_character.nowHP/_character.HP);
_hpmp.txtMP.text = _character.nowMP + "/" + _character.MP;
_hpmp.spMP.width = 100 * (_character.nowMP/_character.MP);
if(_clickCtrl == "ATTACK" ){
//如果目前战场状态是攻击的话,则开始判断是否鼠标在敌方人物身上,是的话,则开始计算伤害数值
for(i=0;i<_roadSprite.numChildren;i++){
var childSprite:Sprite = Sprite(_roadSprite.getChildAt(i));
if(_character.their == "ENEMY" &&_mouseBox.x == Math.floor(childSprite.x/48)*48 && _mouseBox.y == Math.floor(childSprite.y/48)*48){
//调用物理伤害计算方法,开始计算伤害数值
hp2 = getAttHurt(_nowChatacter,_character);
}
}
}
//若伤害数值>0,则显示伤害数值]
if(hp2 > 0){
_hpmp.spHP1.width = 100 * (hp2/_character.HP);
_hpmp.spHP1.x = _hpmp.spHP.x + _hpmp.spHP.width - _hpmp.spHP1.width;
}else{
_hpmp.spHP1.width = 0;
}
}
这样,就可以看到伤害显示了,如图

然后,再来处理受到攻击的时候,显示伤害值
在战场上,加上两个变量
//伤害值
private var _hertHp:int;
//伤害值显示控制用
private var _hertHpIndex:int;
_hertHpIndex这个变量,是在显示伤害值时,让HP动态减少时控制用的
接下来,在控制敌军行动事件中,敌军攻击时,自定义函数里,不直接结束行动,
而是,加上伤害值显示,在伤害值显示完之后,再行动结束
原来是
_nowChatacter.character._fun = function(){
_clickCtrl = "NULL";
_nowChatacter.actionCtrl = true;
_enemyActionCtrl = 0;
addEventListener(Event.ENTER_FRAME, onEn
}
改为-〉
_nowChatacter.character._fun = function(){
_clickCtrl = "HPMP_HERT";
_hpmp.visible = true;
_hpmp.x = _nowChatacter.character._rival.x - 102;
_hpmp.y = _nowChatacter.character._rival.y - 48;
if(_hpmp.x < 0){
_hpmp.x = 0;
}
if(_hpmp.y < 0){
_hpmp.y = 0;
}
_hpmp.txtHP.text = _nowChatacter.character._rival.nowHP + "/" + _nowChatacter.character._rival.HP;
_hpmp.spHP.width = 100 * ( _nowChatacter.character._rival.nowHP/ _nowChatacter.character._rival.HP);
_hpmp.txtMP.text = _nowChatacter.character._rival.nowMP + "/" + _nowChatacter.character._rival.MP;
_hpmp.spMP.width = 100 * ( _nowChatacter.character._rival.nowMP/ _nowChatacter.character._rival.MP);
_hpmp.spHP1.width = 0;
}
相同的地方,我军攻击的时候,也进行相同的处理
改完后是
_nowChatacter.character._fun = function(){
_clickCtrl = "HPMP_HERT";
_hpmp.visible = true;
_hpmp.x = _nowChatacter.character._rival.x - 102;
_hpmp.y = _nowChatacter.character._rival.y - 48;
if(_hpmp.x < 0){
_hpmp.x = 0;
}
if(_hpmp.y < 0){
_hpmp.y = 0;
}
_hpmp.txtHP.text = _character.nowHP + "/" + _character.HP;
_hpmp.spHP.width = 100 * (_character.nowHP/_character.HP);
_hpmp.txtMP.text = _character.nowMP + "/" + _character.MP;
_hpmp.spMP.width = 100 * (_character.nowMP/_character.MP);
_hpmp.spHP1.width = 0;
}
然后在贞事件中,将伤害动态显示
//如果状态是伤害显示,则动态显示伤害值
if(_clickCtrl == "HPMP_HERT"){
//判断一下_hertHpIndex,如果小于伤害值,则动态减少HP,否则结束行动
if(_hertHpIndex < _hertHp){
_nowChatacter.rival.nowHP -= 1;
_hpmp.txtHP.text = _nowChatacter.rival.nowHP + "/" + _nowChatacter.rival.HP;
_hpmp.spHP.width = 100 * (_nowChatacter.rival.nowHP/_nowChatacter.rival.HP);
_hertHpIndex++;
}else{
//根据我方攻击还是敌方攻击,结束行动,并加上相应的事件
if(_roundCtrl == "我方回合"){
_clickCtrl = "NULL";
_nowChatacter.actionCtrl = true;
addEventListener(Event.ENTER_FRAME, onClickFrame);
}else{
_clickCtrl = "NULL";
_nowChatacter.actionCtrl = true;
_enemyActionCtrl = 0;
addEventListener(Event.ENTER_FRAME, onEnemyFrame);
}
}
}
好了,可以显示伤害值了 ^0^!
作者:
lufy 时间: 2010-5-31 09:08
原帖由 klyz505 于 2010-5-30 19:05 发表
楼主,这是你自己开发的吗?怎么这么牛~
是否已经开发完了?能不能放出来耍耍~~看着就馋
是自己开发的阿,练习用的,这里御览的部分就是目前开发完的部分,
等稍微成型的时候,就把代码和程序发上来
目前,只是实现了简单的功能,人物撤退,战斗结束等都还没写
下次,研究一下人物撤退的问题
作者:
lufy 时间: 2010-6-1 10:28
下面来研究一下撤退
就是在每个人行动完之后,加一个HP判断就可以了
HP=0的时候,就让人物不显示,因为曹操传中,还有武将复活等指令,所以不可以从人物数组中删除,只将人物隐藏就可以了
为了方便,我把伤害值动态显示分离出一个方法来
//动态显示伤害值
private function hpmpHert():void{
//判断一下_hertHpIndex,如果小于伤害值,则动态减少HP,否则结束行动
if(_hertHpIndex < _hertHp){
_nowChatacter.rival.nowHP -= 1;
_hpmp.txtHP.text = _nowChatacter.rival.nowHP + "/" + _nowChatacter.rival.HP;
_hpmp.spHP.width = 100 * (_nowChatacter.rival.nowHP/_nowChatacter.rival.HP);
_hertHpIndex++;
}else{
//根据我方攻击还是敌方攻击,结束行动,并加上相应的事件
if(_roundCtrl == "我方回合"){
_clickCtrl = "CHECK";
_nowChatacter.actionCtrl = true;
}else{
_clickCtrl = "CHECK";
_nowChatacter.actionCtrl = true;
_enemyActionCtrl = 0;
}
}
}
这里,结束行动后,_clickCtrl由NULL变为了CHECK,用来判断HP
贞事件中
if(_clickCtrl == "CHECK"){
if(_nowChatacter.rival.nowHP <= 0){
//人物撤退
characterRemove();
}
}
//人物撤退
private function characterRemove():void{
if(_retreatCtrl == 0){
_nowChatacter.rival.setAlpha(0);
}else if(_retreatCtrl == 3){
_nowChatacter.rival.setAlpha(1);
}else if(_retreatCtrl == 6){
_nowChatacter.rival.setAlpha(0);
}else if(_retreatCtrl == 9){
_nowChatacter.rival.setAlpha(1);
}else if(_retreatCtrl == 12){
_nowChatacter.rival.setAlpha(0);
if(_roundCtrl == "我方回合"){
_clickCtrl = "NULL";
_retreatCtrl = -1;
addEventListener(Event.ENTER_FRAME, onClickFrame);
this.contextMenu = _roundMenu;
}else{
_clickCtrl = "NULL";
_retreatCtrl = -1;
addEventListener(Event.ENTER_FRAME, onEnemyFrame);
}
}
_retreatCtrl++;
}
这里的_retreatCtrl,用来让人物闪烁
挺简单的,运行下程序,当人物HP变成0的时候,会闪烁几下,然后消失
作者:
lufy 时间: 2010-6-1 10:29
下面研究反击,反击进行的时间,是在攻击之后,也就是在进行HP判断之后,如果HP还大于0的话,那么这个武将的反击目标又恰好在他的攻击范围之内,那么进行反击
好了,那就在贞事件中判断HP的地方
if(_clickCtrl == "CHECK"){
if(_nowChatacter.rival.nowHP <= 0){
//人物撤退
characterRemove();
}else{
//反击判断
counterCheck();
}
}
//反击判断
private function counterCheck():void{
var isOK:Boolean = false;
var attRoundArr:Array;
//检验反击目标是否在他的攻击范围之内
for each ( var roundment:XML in _arms["Arms" + _nowChatacter.rival.armsIndex]["RangeAttack"].elements( ) ) {
attRoundArr = roundment.toString().split(",");
if((int(attRoundArr[0]) + _nowChatacter.rival.locationX) == _nowChatacter.locationX &&
(int(attRoundArr[1]) + _nowChatacter.rival.locationY) == _nowChatacter.locationY){
isOK = true;
break;
}
}
if(_roundCtrl == "我方回合"){
if(!_counter && isOK){
_counter = true;
_clickCtrl = "COUNTER";
}else{
_clickCtrl = "NULL";
_counter = false;
addEventListener(Event.ENTER_FRAME, onClickFrame);
this.contextMenu = _roundMenu;
}
}else{
if(!_counter && isOK){
_counter = true;
_clickCtrl = "COUNTER";
}else{
_clickCtrl = "NULL";
_counter = false;
addEventListener(Event.ENTER_FRAME, onEnemyFrame);
}
}
//满足反击条件,进行反击
if(_clickCtrl == "COUNTER"){
_character = _nowChatacter;
_nowChatacter = _nowChatacter.rival;
_nowChatacter.rival = _character;
_hertHp = Math.floor(getAttHurt(_nowChatacter,_nowChatacter.rival)*0.75);
_hertHpIndex = 0;
_nowChatacter.character._fun = function(){
_clickCtrl = "HPMP_HERT";
_hpmp.visible = true;
_hpmp.x = _nowChatacter.character._rival.x - 102;
_hpmp.y = _nowChatacter.character._rival.y - 48;
if(_hpmp.x < 0){
_hpmp.x = 0;
}
if(_hpmp.y < 0){
_hpmp.y = 0;
}
_hpmp.txtHP.text = _nowChatacter.rival.nowHP + "/" + _nowChatacter.rival.HP;
_hpmp.spHP.width = 100 * ( _nowChatacter.rival.nowHP/ _nowChatacter.rival.HP);
_hpmp.txtMP.text = _nowChatacter.rival.nowMP + "/" + _nowChatacter.rival.MP;
_hpmp.spMP.width = 100 * ( _nowChatacter.rival.nowMP/ _nowChatacter.rival.MP);
_hpmp.spHP1.width = 0;
}
_nowChatacter.attack();
}
}
这里进行反击很简单,只需要把原来的攻击和被攻击人员交换一下,就可以了
运行代码,一切OK
下次,该试着研究下双击和挡格以及爆击等事件了,!^0^!
作者:
lufy 时间: 2010-6-2 08:53
下面研究双击和致命一击
根据曹操传的计算公式
先来写两个方法
/*
双击概率计算
如果Sa/Sd<1,那么H=1;
如果1<=Sa/Sd<2,那么H=2+18*(Sa/Sd-1);
如果2<=Sa/Sd<=3,那么H=20+80*(Sa/Sd-2);
如果Sa/Sd>=3,那么H=100;
*/
private function getDoubleAtt(attChara:Character,hertChara:Character):int{
var h:int;
//得到双方的爆发力
var attBreakout:int = int(_pXml["peo" + attChara.charaIndex].Breakout);
var hertBreakout:int = int(_pXml["peo" +hertChara.charaIndex].Breakout);
var rate:Number = attBreakout/hertBreakout;
if(rate < 1){
h = 1;
}else if(rate >= 1 && rate < 2){
h = 2 + 18*(rate - 1);
}else if(rate >= 2 && rate < 3){
h = 20 + 80*(rate - 2);
}else if(rate >= 3){
h = 100;
}
if(Math.random()*100 <= h){
return 2;
}
return 1;
}
/*
致命概率计算
如果Sa/Sd<1,那么H=1;
如果1<=Sa/Sd<2,那么H=2+18*(Sa/Sd-1);
如果2<=Sa/Sd<=3,那么H=20+80*(Sa/Sd-2);
如果Sa/Sd>=3,那么H=100;
*/
private function getFatalAtt(attChara:Character,hertChara:Character):Boolean{
var h:int;
//得到双方的士气
var attMorale:int = int(_pXml["peo" + attChara.charaIndex].Morale);
var hertMorale:int = int(_pXml["peo" +hertChara.charaIndex].Morale);
var rate:Number = attMorale/hertMorale;
if(rate < 1){
h = 1;
}else if(rate >= 1 && rate < 2){
h = 2 + 18*(rate - 1);
}else if(rate >= 2 && rate < 3){
h = 20 + 80*(rate - 2);
}else if(rate >= 3){
h = 100;
}
if(Math.random()*100 <= h){
return true;
}
return false;
}
方法定义好了,现在就是在哪里使用的问题了
双击判断,我是在攻击之前判断攻击次数,这样做的好处是以后如果弄个绝招三连击五连击什么的,就可以直接将这个攻击次数设为相应的数字,就可以变成连击绝招了
而致命判断,是在攻击或者反击的时候都发生的,于是把它放在攻击的方法里,
只要发生攻击,就判断是否发生致命一击
在敌军或者我军攻击之前,都先进行双击判断
//判断双击
_attCount = getDoubleAtt(_nowChatacter,_nowChatacter.rival);
然后,修改攻击方法
这里考虑到反击的时候不双击,所以要另外加一个控制
}
//进行攻击
private function toAttack(hert:Boolean = true):void{
//是否是反击判断
if(hert){
_hertHp = getAttHurt(_nowChatacter,_nowChatacter.rival);
}
if(_clickCtrl == "ATTACK"){
_attCount -= 1;
}
_hertHpIndex = 0;
//判断致命一击
_nowChatacter.fatal = getFatalAtt(_nowChatacter,_nowChatacter.rival);
if(_nowChatacter.fatal){
_hertHp = Math.floor(_hertHp*1.25);
if(_hertHp > _nowChatacter.rival.nowHP){
_hertHp = _nowChatacter.rival.nowHP;
}
}
_nowChatacter.character._fun = function(){
_clickCtrl = "HPMP_HERT";
_hpmp.visible = true;
_hpmp.x = _nowChatacter.rival.x - 102;
_hpmp.y = _nowChatacter.rival.y - 48;
if(_hpmp.x < 0){
_hpmp.x = 0;
}
if(_hpmp.y < 0){
_hpmp.y = 0;
}
_hpmp.txtHP.text = _nowChatacter.rival.nowHP + "/" + _nowChatacter.rival.HP;
_hpmp.spHP.width = 100 * ( _nowChatacter.rival.nowHP/ _nowChatacter.rival.HP);
_hpmp.txtMP.text = _nowChatacter.rival.nowMP + "/" + _nowChatacter.rival.MP;
_hpmp.spMP.width = 100 * ( _nowChatacter.rival.nowMP/ _nowChatacter.rival.MP);
_hpmp.spHP1.width = 0;
}
_nowChatacter.attack();
}
这样就可以判断双击和致命了
然后在动作显示的时候,加上相应的显示
致命一击的时候,人物要发光
先把发光的颜色设定好
_fatalColor = new Color;
_fatalColor.brightness = 0.5;
//转为致命一击
public function startFatalColor():void{
this.transform.colorTransform = _fatalColor;
}
//结束致命一击
public function endFatalColor():void{
this.transform.colorTransform = _runColor;
}
然后人物攻击的时候,判断是否显示致命的颜色
//当人物攻击时
if(dir == CharacterIndex.ATTACK_UP || dir == CharacterIndex.ATTACK_DWON ||
dir == CharacterIndex.ATTACK_LEFT || dir == CharacterIndex.ATTACK_RIGHT ){
_peopleBitmap.x = -8;
_peopleBitmap.y = -8;
//在攻击的第一个动作,判断是否是致命一击
if(_fatal){
if(_pointer == 0 && _fatalCtrl < 10){
if(_fatalCtrl == 0){
startFatalColor();
}
_pointer = 0;
_count = 0;
_fatalCtrl++;
}else{
_fatal = false;
_fatalCtrl = 0;
endFatalColor();
}
}
//在攻击的第三个动作,被攻击人物显示被攻击动作
if(_pointer == 2){
//得到被攻击人物动作显示类
_rivalMC = _rival.character;
//根据攻击人物方向,设定攻击和被攻击完毕之后的人物方向
if(_rivalMC.x - this.x > 0){
this._direct = CharacterIndex.RIGHT;
_rivalMC._direct = CharacterIndex.LEFT;
}else if(_rivalMC.x - this.x < 0){
this._direct = CharacterIndex.LEFT;
_rivalMC._direct = CharacterIndex.RIGHT;
}else if(_rivalMC.y - this.y > 0){
this._direct = CharacterIndex.DOWN;
_rivalMC._direct = CharacterIndex.UP;
}else if(_rivalMC.y - this.y < 0){
this._direct = CharacterIndex.UP;
_rivalMC._direct = CharacterIndex.DOWN;
}
_rivalMC.setDir(CharacterIndex.TAKE_A_BEAT);
}
}else{
_peopleBitmap.x = 0;
_peopleBitmap.y = 0;
}
好了,大致就是这样运行一下,我把曹操的爆发力和士气改为很高,很容易看到效果了

作者:
lufy 时间: 2010-6-2 08:56
这是23楼之前的源代码,想看效果的,可以直接打开bin文件夹下的CaoCao.swf
附件:
CaoCao.rar (2010-6-2 08:56, 769.09 K) / 该附件被下载次数 659
http://www.xycq.org.cn/forum/attachment.php?aid=95217
作者:
lewulezo 时间: 2010-7-16 13:49
下载了楼主的包,用IE打开一看画面不停的闪动。
作者:
lewulezo 时间: 2010-7-16 13:53
下载了楼主的包,用IE打开一看画面不停的闪动。
作者:
将来的mod达人 时间: 2010-7-29 11:33 标题: 回复 #26 lewulezo 的帖子
请问是否有FLASH?
作者:
血牛嘎嘎 时间: 2010-7-30 13:13
跪求楼主有所突破啊,不过我想到一个问题,就是FLASH游戏大小有限制,界面效果可能不太好啊
作者:
wakin98 时间: 2010-7-30 16:00
太牛了,不知楼主能否整个完整的游戏出来让吾辈感受一下
作者:
Axie89 时间: 2010-7-30 23:31
能否试试制作一个类似于金群的復刻版.从而提高ccz的多样性?
作者:
Axie89 时间: 2010-7-30 23:33
ccz引擎时代已经过去了.希望楼主能制作出一套自己的引擎突破ccz的各种限制.
作者:
lufy 时间: 2010-7-31 07:18
原帖由 血牛嘎嘎 于 2010-7-30 13:13 发表
跪求楼主有所突破啊,不过我想到一个问题,就是FLASH游戏大小有限制,界面效果可能不太好啊
用flash做手机等游戏的时候有大小限制,如果做单机游戏或者网络游戏的话,是没有什么限制的,如果美工好的话,界面是可以相当漂亮的,做3D也是不成问题的,如果参考一下其他成品的flash就会知道,可以十分完美的
[ 本帖最后由 lufy 于 2010-7-31 07:23 编辑 ]
作者:
lufy 时间: 2010-7-31 07:20
原帖由 Axie89 于 2010-7-30 23:33 发表
ccz引擎时代已经过去了.希望楼主能制作出一套自己的引擎突破ccz的各种限制.
在下纯属研究,至于突破嘛,并不是没有,可能会在制作其他游戏的时候找突破,毕竟做游戏是我的兴趣
作者:
Axie89 时间: 2010-7-31 20:43 标题: 回复 #33 lufy 的帖子
支持你.~
作者:
我爱王丽霞 时间: 2010-8-2 19:53
。。这种东西 不是懂一点就能搞出来的啊。。汗
作者:
Axie89 时间: 2010-8-9 15:40
頂上去... ..
作者:
Axie89 时间: 2010-8-10 15:18
每天都给高手顶一次!
作者:
northwind_x 时间: 2010-8-11 09:57
楼主V5,我也准备做一个在线版的SLG引擎,多多向你学习
作者:
Axie89 时间: 2010-8-11 20:10
给高手每天顶一次,唔唔唔,轩辕的修改区冷清了。。van大和金圭子回来就好了
作者:
northwind_x 时间: 2010-8-22 21:59
等待楼主更新
作者:
northwind_x 时间: 2010-8-22 23:55
现在轩辕春秋的下载速度太慢了,楼主能把你的源码给个外链吗?或者发到我的邮箱norristong_x#qq.com,多谢
作者:
Axie89 时间: 2010-8-30 23:36
对了.牛人,你有方法更换ccz的meff法术类吗?
作者:
lufy 时间: 2010-8-31 08:36
原帖由 Axie89 于 2010-8-30 23:36 发表
对了.牛人,你有方法更换ccz的meff法术类吗?
其实无论是法术也好,攻击也好,或者是走路等,都是将一些连续的图片一张一张的显示出来,用眼睛看起来就成了一组组动画,跟电影是一个道理的,如果能看懂我的代码的话,很明显可以看出,我把人物四个方向的不同动作都装进了一个个的数组,然后按照顺序显示这个数组里的每个元素,就成了走路,攻击等动作,如果你把一些更复杂的动作装进数组来显示,那么你就可以实现改变曹操传动作的贞数,可以做特殊攻击,在特殊攻击的时候,显示一些特殊的攻击动作,法术也一样,如果我做的话,也是将不同的法术图片装进不同的数组,来调用它们,并且按照顺序显示,这样就成了法术效果,你只要准备不同的图片,就可以变成不同的法术,伤害名称等,只不过是个定义而已,比如想弄得华丽一些,可以在使用法术的时候,先调用一个类似四神一样的动画,然后再调用普通法术攻击的动画,其实原理都是很简单的
[ 本帖最后由 lufy 于 2010-8-31 08:37 编辑 ]
作者:
Axie89 时间: 2010-9-5 19:55 标题: 回复 #43 lufy 的帖子
╮(╯▽╰)╭忙死了最近,其实我是一个美工,之前跟一个高手谈论过这个话题,并且尝试把meff里面的动画(那堆bmp。。)替换另外的东西(什么太极啊。一堆乱七八糟的东西。。)发现RV和周瑜导入器都没法导入新的bmp动画文件,为此,我尝试请教了star,godtype,才发现那些ue地址是包括了这张bmp里面播放的声音,帧数,那些又是乱七八遭的东西。你有方法可以找到Ue地址包含的信息么?万分感谢
作者:
Axie89 时间: 2010-9-5 20:01
对了,这是星哥的原话
Meff.e5的增加比较繁琐,
我以前略微研究过一下,这个文件里的图片不仅仅是单纯的图片形象,还包含了一段信息,用来表示这个图片的帧数,以及使用这个图片时播放的声音,也就是这个对应策略的声音,另外可能还有其他一些信息。
具体做法要先作好一段信息,再和图片信息拼接成一个文件,这样就可以导入到Meff.e5中去了。
但是导入并没有现成的工具,周瑜的导入器也不行,我的方法是先用周瑜的导入器随便导入一个文件,这样在Meff.e5中就可以增加一个区段,然后用Ue打开事先拼接好的文件和Meff,如果了解LS文件的格式就不难了,先查找到新区段的起始位置,再把拼接好的文件复制的这个位置就行了
Mcall00.e5的增加方法不详
作者:
lufy 时间: 2010-9-6 07:05
原帖由 Axie89 于 2010-9-5 19:55 发表
╮(╯▽╰)╭忙死了最近,其实我是一个美工,之前跟一个高手谈论过这个话题,并且尝试把meff里面的动画(那堆bmp。。)替换另外的东西(什么太极啊。一堆乱七八糟的东西。。)发现RV和周瑜导入器都没法导入新的 ...
说实话,我c和c++方面虽然能写一些简单代码,但基本属于空白,当年做曹操传MOD的时候引擎修改等也是拜托了其他高手,UE等更是依葫芦画瓢
我上面说的原理简单,其实是说自己做游戏的时候实现这个功能并不难,
最近在给公司挺忙的,等闲下来后,
继续研究下flash版曹操传的法术功能
作者:
‰舍得 时间: 2010-9-6 07:47
123123123123
作者:
northwind_x 时间: 2010-9-14 11:28
楼主用FLASH绘图时效率如何啊?
作者:
天机 时间: 2010-9-14 13:55
那个,问一下,楼主能做出一个剧本编辑器或者引擎修改器一类的东西吗?我们就能对你的引擎做mod了
作者:
lufy 时间: 2010-9-15 08:27
原帖由 northwind_x 于 2010-9-14 11:28 发表
楼主用FLASH绘图时效率如何啊?
用flash绘图,我觉得效率是绝对没有问题的,
现在用flash开发的游戏越来越多了,大型的游戏也数不胜数,
在我看来是不存在什么效率问题的。
作者:
lufy 时间: 2010-9-15 08:29
原帖由
天机 于 2010-9-14 13:55 发表
那个,问一下,楼主能做出一个剧本编辑器或者引擎修改器一类的东西吗?我们就能对你的引擎做mod了
在下一开始就说了,只是研究一下,没打算做成引擎或是突破一些什么东西,
要是做引擎的话,我会做一个新的,不想模仿曹操传等,那样就没什么意思了
作者:
前田庆次 时间: 2010-9-15 13:12
搞个千人战棋出来
作者:
northwind_x 时间: 2010-9-18 15:32
下载的FLASH一直不停抖动,期待楼主发布一个稳定版本
作者:
lufy 时间: 2010-11-22 15:04
原帖由 northwind_x 于 2010-9-18 15:32 发表
下载的FLASH一直不停抖动,期待楼主发布一个稳定版本
如果有Flash CS4的话,把源码重新发布一下应该没什么问题的
测试的话,这里倒是可以看到
http://lufy.hp2.jp/computer/html/caocao.html
作者:
wwt1118 时间: 2010-11-28 11:30
强帖,留名待用
作者:
破天银狼 时间: 2010-12-14 19:24
不能不顶啊,楼主,咱支持你,希望咱们网络对战CCZ的愿望能早点实现,看你了!还有希望你能做个比现在CCZ的战棋类游戏更强更好的游戏引擎出来,顶!
欢迎光临 轩辕春秋文化论坛 (http://www.xycq.org.cn/forum/) |
Powered by Discuz! 5.0.0 |