网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
02月04日漏签0天
吉里吉里吧 关注:51,268贴子:70,971
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 15回复贴,共1页
<<返回吉里吉里吧
>0< 加载中...

【KAG式RPG教程】

  • 只看楼主
  • 收藏

  • 回复
  • Roflolmao
  • 臬台
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
首先這帖子是不定期更新,本人想到要先做哪一個就寫下來這裏。
當然大家可以要求其他東西,我會盡量幫助你們
本帖無目錄


  • 弜孟
  • 知州
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我想学,但是我不懂,大学里比较闲,所以想多学点东西


2026-02-04 05:52:44
广告
不感兴趣
开通SVIP免广告
  • 微月如枫
  • 知府
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
辛苦了


  • 弜孟
  • 知州
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
真是辛 苦 了


  • 叹冬
  • 巡抚
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
辛苦了!!!


  • Roflolmao
  • 臬台
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
這次是【遇怪】以及【地圖行走】
不過遇到怪物這個很容易而已。
若是像精靈寳可夢的話簡單的放個 if 和 intrandom 就行了。
[eval exp="f.encounter=intrandom(2000,2500)"]
以上的意思就是:f.encounter的數值是2000與2500之間的一個數字。
然後[if exp="f.encounter == 2222"]進入戰鬥[endif]
完成。
不過問題是,if該放在哪兒?
就是執行每一步的代碼後面就行。
然後一下將開始【地圖行走】的教程。
*moving
[call target=*up cond="System.getKeyState(VK_UP)"]
[call target=*down cond="System.getKeyState(VK_DOWN)"]
[call target=*left cond="System.getKeyState(VK_LEFT)"]
[call target=*right cond="System.getKeyState(VK_RIGHT)"]
[wait time=20]
[jump target="*moving"]
以上是讓你能夠利用上下左右的按鈕的代碼。
放入wait time的理由是防止無限Loop導致程式當機。你可以改變它的速度不過不能放入0。
不過就算你按了“上”,你的人物也不會上去,還缺少了一些東西。不過在那之前,你必須要有一個圖案讓你知道你的人物的行動。
在*moving前放入
[eval exp=f.top=0]
[eval exp=f.left=0]
[eval exp=f.bgtop=260]
[eval exp=f.bgleft=0]
[image layer=1 storage="character" page=fore left=&f.left top=&f.top clipleft=0 cliptop=0 clipheight=100 clipwidth=100 visible=true]
character是你的人物圖案,left=&f.left 代表圖案的X位置是f.left,也就是(現在)0。
Clipheight是圖案的高度,Clipwidth則是長度。
f.bgleft是背景的X位置,之後會用到。
這個是初始化的代碼,一旦開始你的人物就會出現與畫面中。
那麼,我們來試試看按一按“上”吧。
*up
[if exp="f.top == 0"]
[image layer=1 storage="character" page=fore left=&f.left top=0 clipleft=0 cliptop=0 clipheight=100 clipwidth=100 visible=true]
[return]
[else]
[er]
[nowait]
[if exp="f.top >= 261"]
[eval exp="f.top=f.top-10"]
[image layer=1 storage="character" page=fore left=&f.left top=&f.top clipleft=0 cliptop=0 clipheight=100 clipwidth=100 visible=true]
[endif]
[if exp="f.top <= 260"]
[eval exp="f.top=f.top"]
[eval exp="f.bgtop=f.bgtop+10"]
[image storage="bg" page=fore layer=0 visible=true left=&f.bgleft top=&f.bgtop]
[endif]
[if exp="f.bgtop>=0"]
[eval exp="f.top=f.top-10"]
[image layer=1 storage="character" page=fore left=&f.left top=&f.top clipleft=0 cliptop=0 clipheight=100 clipwidth=100 visible=true]
[eval exp="f.bgtop=0"]
[image storage="bg" page=fore layer=0 visible=true left=&f.bgleft top=&f.bgtop]
[endif]
[return]
[endif]
很亂吧?不過掌握了這一點后就行了。我們慢慢從一行一行地理解下去
當你的人物的位置(這兒即f.top)是0的話,代表你無法再繼續走上去。
然後return,返回*moving
而若是相反的話(else f.top是1以上的話),我們就進入“行走”代碼。
(先等一等,我必須交代一件事情就是:
f.top的畫面位置。若是0的話,就是最上一邊,數字越大的話你的人物位置就離上面越遠)
當你的人物的位置超過261(也就是我畫面的高度的一半)f.top將減與10(即走上去)。
這兒的圖案是“更新用”的,每當行走一步就更新一下圖案(若是動態的話),順便更新位置。
然後若是少於260的話,人物的位置保持不變,相反這次輪到背景更新位置。
f.bgtop+10也就是讓背景“下去”,這裏的目的是讓在比較長的背景中使人物看來在行走。
而當f.bgtop到達0的時候(也就是圖片的高度上限),我們繼續執行人物的行走。
於是繼續f.top-10。然後為保持背景不少於0,而加入f.bgtop=0。
最後不忘了return,返回*moving,然後從此無限來回。
行走篇完結。
遇怪呢?
在最后一個return前放入“[if exp="f.encounter == 2222"]進入戰鬥[endif]”下去。
這樣在返回前你就能被送到戰場去了。
戰鬥篇臭長,超不想做的(喂
那麼下次再見。盡量在一星期前後更新


  • Roflolmao
  • 臬台
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我忘了説明地圖中若有障礙物的情況下該怎麽辦= =
簡單說就是在*up之後加入
[if exp="f.top >= 20 && f.top <= 40 &&f.left >= 50 && f.left <= 100"]
然後停止人物行走就行了。
也就是説當你的人物到達了這一四方地帶就無法繼續走上去了。
看不懂就去試驗下就會明白了。
然後相反若在“走下去(*down)”的話,記得要放入這個
[if exp="f.top >= 20 && f.top <= 39 &&f.left >= 50 && f.left <= 100"]然後停止行走。
爲何這兒的第二個f.top是39呢?因爲當你走上去時,被强行停止后的位置是40。
若你要下去的話,f.top又是40之内,會變得無法動彈。
相反若是39的話,你的人物由於位于40,所以可以毫無壓力的走下去


  • Roflolmao
  • 臬台
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
接下來是【戰鬥選項】
另外先提醒下,由於個人懶因,小事詳細不多教,各位請自己研究。(不過依舊可以發問)
我們這次就用兩個隊友(A,B)和一個敵人(Z)來做示範
在地圖上遇到怪物后就傳送到這兒(演出效果就不教了)
首先你或要讓人物按照順序配置吧?
當你選擇A進入隊伍位置a的話,在這裏也要讓他順著配置出現。
*char1
[if exp="f.base[1]!=0"]
[if exp="f.hp[f.base[1]]<=0"]
[jump target=*char2]
[endif]
xxx
[elsif exp="f.base[1]==0"]
[jump target=*char2]
[endif]
*char2
這裏的意思是:
若位置a(f.base[1])存在某個人物,但血條歸0(f.hp[f.base[1]]),就跳過位置a而執行位置b的代碼。(這樣玩家就無法選擇蜇人物的戰鬥方式)。
又或若位置a不存在任何人的話,也照樣跳到*char2。
那麽,進入戰鬥選項了。
提醒:我的游戲里是每個人都有自己專用的畫面選項。
在xxx這一行放入你要的呼喚代碼(jump/call,新檔案/同樣檔案)
然後裏面就寫入:
[if exp="f.base[1]==1"] //若位置a裏的人物是人物A的話
//這裏放入顯示人物A的HP,MP,EXP等等的代碼。
//然後再一次放入呼喚代碼(新檔案/同樣檔案任何一個都可)
在新地方再放入這些:
[iscript]
for(var i=1; i<=f.char.length; i++){
if(f.base[1]==i){
kag.tagHandlers.locate(%[x:85,y:297]);
kag.tagHandlers.button(%[graphic:"atkbutton.png" , exp:"f.atk[" + i + "] =1" , target:"*enemies"]);
kag.tagHandlers.locate(%[x:85,y:360]);
kag.tagHandlers.button(%[graphic:"defbutton.png" , exp:"f.def[" + i + "] =1" , target:"*enemies"]);
if(f.mp[i]>=180){
kag.tagHandlers.locate(%[x:260,y:665]);
kag.tagHandlers.button(%[graphic:rebutton1 , exp:"f.skill[" + i + "] =1, target:"*enemies"]);}
else{kag.tagHandlers.locate(%[x:260,y:665]); kag.tagHandlers.button(%[graphic:rebutton1 , enabled:"false"]);}
......
[endscript]
for這兒不多解釋。
再一次確認位置a里的人物。(而if裏面的代碼是確認了在於位置a的是人物A)
第一個是攻擊按鈕,一旦點擊,【攻擊的命令】就發動(f.atk[ i ] = 1),然後去*enemies選擇要攻擊的敵人。
第二個是防禦按鈕。第三個是技能按鈕。若擁有的MP是多餘180(f.mp[i]>=180),玩家就可以點擊此按鈕。相反的話,按鈕變得點擊不能。
*enemies
for( var i = 1; i <= f.char.length; i++ ){
for( var j = 1; j <= f.enemy.length; j++ ){
if( f.atk[i] == 1 ){
if(f.base[7]==j){
kag.tagHandlers.locate(%[x:54,y:140]);
kag.tagHandlers.button(%[normal:"mon"+i+".png" , exp:"f.aimmob[f.base[" + k + "]] =" + i + "" , target:"*char2"]);
break;}
}
}
}
若人物A的攻擊命令是TRUE的話(即 f.atk[1]==1),接下來就看看我們的敵人的位置。
f.base[7~12等等]是敵人的隊伍,若位置7擁有敵人的話,這裏的敵人的按鈕就會顯示出來讓玩家點擊。
一旦點擊后,我們就保存“ 位置7的敵人將被位置a的人物攻擊 ”的命令。(f.aimmob[ f.base[ k ] ] = j)然後回去*char2
break;是爲了防止程式繼續執行下去。一旦找到要點了后就抛棄其他代碼。
好,暫時就這些,我寫的或許有點太少了,大家就別介意發問題吧。
下一(終?)章就是戰鬥篇了


2026-02-04 05:46:44
广告
不感兴趣
开通SVIP免广告
  • 弜孟
  • 知州
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • Roflolmao
  • 臬台
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
進入人物A的技能文件
(若你有相當複雜的技能表的話,就善用TJS的 if for 吧)
就衹有這兒我不會多説多少,這裏的是思考路綫是:若此命令是TRUE就執行,FALSE就查看下一個命令,重複。這兒我將衹用攻擊命令來做提示。
若f.atk[1] == 1(也就是攻擊命令是TRUE的話),而f.aimmob[1] = 2的話(人物A的目標是敵人Z,你就得利用 f.atk[1] 該有的攻擊力量減少敵人Z的HP。
不過一個一個判斷每一個人物/怪物/命令會相當費力吧?
這兒請記得for會幫助你解決這些問題。
【戰鬥篇】完,教程結束。
最後這裏我知道我沒教多少,因爲我不打算一直喂食你們。這些代碼方法是我自己親自研究了1,2年。而因爲這樣我現在對程式十分的理解它的“行動”。
你們也能行的。有問題的不妨問問,我會盡量解答。


  • Roflolmao
  • 臬台
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
追加:
攻擊時浮現的數字效果
blog.goo.ne.jp/nyoro2tove/e/63065ea8eff3e86b5224df16df42316a


  • 微月如枫
  • 知府
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
加油更


  • 恐怖病毒
  • 庶人
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请问下,这东西能做成可视化组件喵???代码忙忙的⊙﹏⊙b汗


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 15回复贴,共1页
<<返回吉里吉里吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示