したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

キャラ製作議論,質問など

1マニーマイラブ</b><font color=#FF0000>(e3O3bIIM)</font><b>:2002/09/21(土) 02:15
ここでは主にキャラ製作のことについての話題を扱ってください.
まあ,ちょっとした雑談もかまいませんが….

290たるのひと:2005/07/27(水) 00:44:05
>>289
カービィの方でしょうか。応援してますyp。
たるA(モンク)の投げのソース(ちょっと変えたもの)を貼ります。
「色々改変したりして使ってください。」

つ//モンク
void CCharacter::act_mnk_nage()//モンク投げ
{
ZFront();
if(pdat->counter == 0){
pdat->cnow = CELL_PUNCH3;
//掴みマーク表示&掴み効果音発生
AddEffect(EFCTID_MARKC,(int)pdat->x + zurex(30),-30,0);
PlaySysSound(SYSTEMSOUND_CATCH);
}
if(pdat->counter<5){
pdat->cnow = CELL_PUNCH3;
}else if(pdat->counter<25){
pdat->y-=40;
}else if(pdat->counter<41){
pdat->y+=50;
}else{
//pdat->cnow = CELL_nage2;
AddEffect(EFCTID_MARK3,(int)pdat->x + zurex(80),-70,0);
//PlaySysSound(SYSTEMSOUND_HIT3);
pdat->x+=40;
pdat->aid = ACTID_NEUTRAL;//注1
}
}

//投げモンク(相手側)
DWORD CCharacter::eact_mnk_nage(GOBJECT *pedat)
{
if(pedat->counter<5){
pedat->cnow=DCELL_NAGERARE1;
pedat->x=pdat->x+zurex(36);
return(0);
}else if(pedat->counter<25){
pedat->y=pdat->y;
return(0);
}else if(pedat->counter<41){
pedat->y=pdat->y;
return(0);
}else{//開放
StartAttack(ATTACKINFO_NAGEMNK);
AddDamage(pedat->id,(int)pdat->x + zurex(30),-30);
return(ACTID_DOWN);
}
}

以下解説。↓
キャラクターの位置は、
自キャラがpdat->x,pdat->y
敵キャラがpedat->x,pedat->yに格納されてます。
この値を変えれば、キャラクターの位置が変わるわけです。
xが横軸、yが縦軸なのでxをいじれば横に、yをいじれば縦にずれます。
このソースでは自キャラの動きのほうでy軸を変えて、
敵キャラの動きのほうで、自キャラのy軸をそのまま敵キャラのy軸に代入しています。
敵キャラの動きソースで必ず忘れてはならないのがreturnで、これがないと不具合が起こるので、
必ずカウンターに応じて必要なreturnを返すようにしてください。
StartAttack(ATTACKINFO_NAGEMNK);ここで攻撃力を設定し、
AddDamage(pedat->id,(int)pdat->x + zurex(30),-30);ここで上で設定したダメージを与えています。
最後にreturn(ACTID_DOWN);を返すことで、敵キャラは通常動作に戻ることができます。
「AddEffect」では、画面をゆらしたり円を発生させたりしています。
また、//注1のACTID_NEUTRALを他のアクションIDに変更すれば、投げ終了後に
ニュートラルとは違う動作に移行します。たるAでは、回転して着地する動作に移行するようになっています。
cnowとcounterは多分大丈夫だと思いますので省略します。

これでもわからないようなら、ちょっとアドバイスのしようが無いのですが。
制作頑張ってください。

291たるのひと:2005/07/27(水) 00:49:16
スレの住人の反応は冷たいようですが、
職人として腕を磨けば必ず認められるようになると思います。
ソースをコピペするだけでなくて、
ソースの中身を理解するよう努力しながら作っていけば、
いつか自分の思い通りにキャラが動くようになるでしょう。

くれぐれもそのままコピペだけで終わらせては駄目ですお!

292風来坊:2005/07/27(水) 09:58:50
character.hの該当箇所に以下を、

DWORD CCharacter::Message(DWORD msg,LPVOID dat,DWORD prm)
{
GOBJECT* pobjdat;
GOBJECT* pedat = GetInfo(pdat->eid);

switch(msg){
case GOBJMSG_NAGE:{//投げ、敵側動作
pobjdat = GetInfo(prm);
if(pobjdat==NULL)return(0);
return(eact_nage(pobjdat));
}
break;

case GOBJMSG_STRIKER://支援攻撃要請
if(pdat->aid == ACTID_TAIKICYU){
RemoveProperty( GOBJFLG_TOBETARGET );//ターゲットにはならない...なんでこれ外すんだっけ?(忘)
ChangeAction( ACTID_STRIKER_IN );
return(ALL_RIGHT);
}
return(0);
default:
return(CCharacterBase::Message(msg,dat,prm));//キャラクター基本クラスに処理を任せる
}
return(TRUE);
}

**************************************************

BOOL CCharacter::Command_OnNormal(DWORD keyinfo)
{
GOBJECT* pdat = GetGObject();
GOBJECT* pedat = GetInfo(pdat->eid);

if(pdat->aid & ACTID_KUCYU){////ジャンプ動作中
}
else{
if(keyinfo & KEYSTA_FOWORD && keyinfo & KEYSTA_BC2 &&
NageHantei(MAAI_NAGE) && ObjCatch(pdat->eid, GOBJMSG_NAGE)){//投げ
pdat->aid = ACTID_NAGE1;
return TRUE;
}
}

return CCharacterBase::Command_OnNormal(keyinfo);
}

**************************************************

DWORD CCharacter::Action()
{
switch(GetGObject()->aid){//追加した行動への遷移をここに記述する
case ACTID_NAGE1:act_nage();break;//投げ

case 0:return(0);//WARNINGよけ。消してもいい

default://それ以外はキャラクター基本クラスに任せる
return CCharacterBase::Action();
}

return(TRUE);
}

**************************************************

void CCharacter::InitAttackInfo()
{
ZeroMemory(aif,sizeof(aif));
int i;

i = ATTACKINFO_NAGE;//投げ
aif[i].hit=HITINFO_MARK3 | HITINFO_SNDHIT3;
aif[i].id=ATTACK_STRONG;
aif[i].damage=40;
}

character.cppの該当箇所に以下を、

/*--------------------------------------------------------------
メインキャラクタークラス
----------------------------------------------------------------*/
class CCharacter : public CCharacterBase
{
//*********************************************
// CCharacterクラス独自の関数
//*********************************************
private:
//敵側行動
DWORD eact_nage(GOBJECT* pedat);//投げ
}

**************************************************

//行動IDをここに追加する
#define ACTID_NAGE1(ACTID_ATTACK | ACTID_NAGE | 0x001A)//投げ

**************************************************

//攻撃力番号をここに定義する
#define ATTACKINFO_NAGE10//投げ

**************************************************

//ユーザー定義メッセージ
#define GOBJMSG_NAGE(GOBJMSG_USERDEFINE | 0x0001)//投げ

**************************************************

//間合い
#define MAAI_SHORT(50)
#define MAAI_MIDDLE(150)
#define MAAI_LONG(250)
#define MAAI_NAGE(50)

入れて、action.cppを>>290を参考に作れば、ひとまずプレイヤーは投げを使えるようになる。
当然、IDは重複しないように変更しておくこと。
過保護が過ぎたかな?


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板