Project1
标题: 判断地图图块是否可以通行 [打印本页]
作者: 79160475 时间: 2016-5-12 09:46
标题: 判断地图图块是否可以通行 就比如说判断角色上方4个的图块是否可以通行,如果可以,就跳过去(类似弹簧)。
可以做的吗?
各位大神帮忙回答一下谢谢。
作者: lirn 时间: 2016-5-12 22:55
应该有类似的脚本吧
作者: 79160475 时间: 2016-5-13 22:48
有谁帮忙发一下。谢谢
作者: r901042004 时间: 2016-5-14 14:26
本帖最后由 r901042004 于 2016-5-14 15:15 编辑
內建判定通行方向的腳本代碼如下
x, y座標及其要通行的方向(d)
Game_CharacterBase.prototype .isMapPassable = function ( x, y, d) {
var x2 = $gameMap.roundXWithDirection ( x, d) ;
var y2 = $gameMap.roundYWithDirection ( y, d) ;
var d2 = this .reverseDir ( d) ;
return $gameMap.isPassable ( x, y, d) && $gameMap.isPassable ( x2, y2, d2) ;
} ;
Game_CharacterBase.prototype .isMapPassable = function ( x, y, d) {
var x2 = $gameMap.roundXWithDirection ( x, d) ;
var y2 = $gameMap.roundYWithDirection ( y, d) ;
var d2 = this .reverseDir ( d) ;
return $gameMap.isPassable ( x, y, d) && $gameMap.isPassable ( x2, y2, d2) ;
} ;
在你要判定通行度的地方加入以下腳本
var x = $gamePlayer.x ;
var y = $gamePlayer.y ;
var d = 2 ; //2:下 4:左 6:右 8:上
var distance = 4 ; //距離4格
var passable = false ;
if ( d == 2 ) {
y += distance;
passable = $gamePlayer.isMapPassable ( x, y-1 , d) ;
}
else if ( d == 4 ) {
x -= distance;
passable = $gamePlayer.isMapPassable ( x+1 , y, d) ;
}
else if ( d == 6 ) {
x += distance;
passable = $gamePlayer.isMapPassable ( x-1 , y, d) ;
}
else if ( d == 8 ) {
y -= distance;
passable = $gamePlayer.isMapPassable ( x, y+1 , d) ;
}
if ( passable)
$gamePlayer.jump ( x-$gamePlayer.x , y-$gamePlayer.y ) ;
var x = $gamePlayer.x ;
var y = $gamePlayer.y ;
var d = 2 ; //2:下 4:左 6:右 8:上
var distance = 4 ; //距離4格
var passable = false ;
if ( d == 2 ) {
y += distance;
passable = $gamePlayer.isMapPassable ( x, y-1 , d) ;
}
else if ( d == 4 ) {
x -= distance;
passable = $gamePlayer.isMapPassable ( x+1 , y, d) ;
}
else if ( d == 6 ) {
x += distance;
passable = $gamePlayer.isMapPassable ( x-1 , y, d) ;
}
else if ( d == 8 ) {
y -= distance;
passable = $gamePlayer.isMapPassable ( x, y+1 , d) ;
}
if ( passable)
$gamePlayer.jump ( x-$gamePlayer.x , y-$gamePlayer.y ) ;
理論上可以用
補充一點
isMapPassable主要是判定
某一格是否可以通行到給定的方向
以及到下一格是否可以通行回來
所以要孤島式的跳躍就要從
Game_Map.prototype.checkPassage = function(x, y, bit) 下手
作者: 79160475 时间: 2016-5-14 14:58
本帖最后由 79160475 于 2016-5-14 15:02 编辑
r901042004 发表于 2016-5-14 14:26
內建判定通行方向的腳本代碼如下
x, y座標及其要通行的方向(d)
Game_CharacterBase.prototype.isMapPassabl ...
可是我有点看不懂,有详细的解释吗?
还有好像会出错
插不进去那么多怎么办
var x = $gamePlayer.x;
var y = $gamePlayer.y;
var d = 2; //2:下 4:左 6:右 8:上
var distance = 4; //距離4格
var passable = false;
if (d == 2) {
y += distance;
passable = $gamePlayer.isMapPassable(x, y-1);
}
else if (d == 4) {
x -= distance;
passable = $gamePlayer.isMapPassable(x+1, y);
只能到这了
作者: r901042004 时间: 2016-5-14 15:14
■ 目標
▲ 輔助點
□
□
★ 玩家
以上是你舉例的情形
8
4▲6
2
我們可以簡單利用輔助點判定上方(8)是否可以通行
else if (d == 8) {
y -= distance;
passable = $gamePlayer.isMapPassable(x, y+1);
}
利用以上代碼,往上x座標不會改變,y座標會變少
所以(x, y-distance) 是目標點的座標
(x, y-distance+1)是輔助點的座標
■ (x, y-distance)
▲ (x, y-distance+1)
□
□
★ (x, y)
我代碼的部分有一些打錯
等等修改
作者: 79160475 时间: 2016-5-14 15:34
本帖最后由 79160475 于 2016-5-14 15:38 编辑
內建判定通行方向的腳本代碼如下
x, y座標及其要通行的方向(d)
JAVASCRIPT 代码复制打印
6388.Game_CharacterBase.prototype.isMapPassable = function(x, y, d) {
6389. var x2 = $gameMap.roundXWithDirection(x, d);
6390. var y2 = $gameMap.roundYWithDirection(y, d);
6391. var d2 = this.reverseDir(d);
6392. return $gameMap.isPassable(x, y, d) && $gameMap.isPassable(x2, y2, d2);
6393.};
先把上面的变成插件插进去
var x = $gamePlayer.x;
02.var y = $gamePlayer.y;
03.var d = 2; //2:下 4:左 6:右 8:上
04.var distance = 4; //距離4格
05.var passable = false;
06.if (d == 2) {
07. y += distance;
08. passable = $gamePlayer.isMapPassable(x, y-1, d);
09.}
10.else if (d == 4) {
11. x -= distance;
12. passable = $gamePlayer.isMapPassable(x+1, y, d);
13.}
14.else if (d == 6) {
15. x += distance;
16. passable = $gamePlayer.isMapPassable(x-1, y, d);
17.}
18.else if (d == 8) {
19. y -= distance;
20. passable = $gamePlayer.isMapPassable(x, y+1, d);
21.}
22.if (passable)
23. $gamePlayer.jump(x-$gamePlayer.x, y-$gamePlayer.y);
然后在事件中插入脚本(以上),对吧
03.var d = 2; //2:下 4:左 6:右 8:上
好像这一行怪怪的
作者: r901042004 时间: 2016-5-14 15:47
本帖最后由 r901042004 于 2016-5-14 17:46 编辑
製作了一個小插件
使用方法:
在事件的腳本中輸入 this.jumpDistance(4);
就可以往面對的方向跳4格
Game_Interpreter.prototype .jumpDistance = function ( distance) {
if ( !$gamePlayer.isMoving ( ) && $gamePlayer.canMove ( ) )
{
var x = $gamePlayer.x ;
var y = $gamePlayer.y ;
var d = $gamePlayer.direction ( ) ;
var passable = false ;
if ( d == 2 ) {
y += distance;
}
else if ( d == 4 ) {
x -= distance;
}
else if ( d == 6 ) {
x += distance;
}
else if ( d == 8 ) {
y -= distance;
}
passable = $gameMap.checkPassage ( x, y, 0x0f) ;
for ( var i=1 ; i<=4 ; i++)
passable = passable || $gameMap.checkPassage ( x, y, ( 1 << ( i - 1 ) ) & 0x0f) ;
if ( passable && $gameMap.isValid ( x, y) )
$gamePlayer.jump ( x-$gamePlayer.x , y-$gamePlayer.y ) ;
}
} ;
Game_Interpreter.prototype .jumpDistance = function ( distance) {
if ( !$gamePlayer.isMoving ( ) && $gamePlayer.canMove ( ) )
{
var x = $gamePlayer.x ;
var y = $gamePlayer.y ;
var d = $gamePlayer.direction ( ) ;
var passable = false ;
if ( d == 2 ) {
y += distance;
}
else if ( d == 4 ) {
x -= distance;
}
else if ( d == 6 ) {
x += distance;
}
else if ( d == 8 ) {
y -= distance;
}
passable = $gameMap.checkPassage ( x, y, 0x0f) ;
for ( var i=1 ; i<=4 ; i++)
passable = passable || $gameMap.checkPassage ( x, y, ( 1 << ( i - 1 ) ) & 0x0f) ;
if ( passable && $gameMap.isValid ( x, y) )
$gamePlayer.jump ( x-$gamePlayer.x , y-$gamePlayer.y ) ;
}
} ;
受限於腳本不能打太多行
所以還是做了這個比較快
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1