Sprite 如何让一个精灵跟随Java中的另一个精灵?
以下是初始字符的代码:Sprite 如何让一个精灵跟随Java中的另一个精灵?,sprite,2d-games,sprite-sheet,Sprite,2d Games,Sprite Sheet,以下是初始字符的代码: public class Player extends Mob { private InputHandler input; private int colour = Colours.get(-1, 111, 145, 543); private int scale = 1; protected boolean isSwimming = false; private int tickCount = 0; public Pl
public class Player extends Mob {
private InputHandler input;
private int colour = Colours.get(-1, 111, 145, 543);
private int scale = 1;
protected boolean isSwimming = false;
private int tickCount = 0;
public Player(Level level, int x, int y, InputHandler input) {
super(level, "Player", x, y, 1);
this.input = input;
}
public void tick() {
int xa = 0;
int ya = 0;
if (input.up.isPressed()) {
ya--;
}
if (input.down.isPressed()) {
ya++;
}
if (input.left.isPressed()) {
xa--;
}
if (input.right.isPressed()) {
xa++;
}
if (xa != 0 || ya != 0) {
move(xa, ya);
isMoving = true;
} else {
isMoving = false;
}
if (level.getTile(this.x >> 3, this.y >> 3).getId() == 3) {
isSwimming = true;
}
if (isSwimming && level.getTile(this.x >> 3, this.y >> 3).getId() != 3) {
isSwimming = false;
}
tickCount++;
this.scale = 1;
}
public void render(Screen screen) {
int xTile = 0;
int yTile = 28;
int walkingSpeed = 4;
int flipTop = (numSteps >> walkingSpeed) & 1;
int flipBottom = (numSteps >> walkingSpeed) & 1;
if (movingDir == 1) {
xTile += 2;
} else if (movingDir > 1) {
xTile += 4 + ((numSteps >> walkingSpeed) & 1) * 2;
flipTop = (movingDir - 1) % 2;
}
int modifier = 8 * scale;
int xOffset = x - modifier / 2;
int yOffset = y - modifier / 2 - 4;
if (isSwimming) {
int waterColour = 0;
yOffset += 4;
if (tickCount % 60 < 15) {
waterColour = Colours.get(-1, -1, 225, -1);
} else if (15 <= tickCount % 60 && tickCount % 60 < 30) {
yOffset -= 1;
waterColour = Colours.get(-1, 225, 115, -1);
} else if (30 <= tickCount % 60 && tickCount % 60 < 45) {
waterColour = Colours.get(-1, 115, -1, 225);
} else {
waterColour = Colours.get(-1, 225, 115, -1);
}
screen.render(xOffset, yOffset + 3, 0 + 27 * 32, waterColour, 0x00, 1);
screen.render(xOffset + 8, yOffset + 3, 0 + 27 * 32, waterColour, 0x01, 1);
}
// upper body
screen.render(xOffset + (modifier * flipTop), yOffset, xTile + yTile * 32, colour, flipTop, scale);
screen.render(xOffset + modifier - (modifier * flipTop), yOffset, (xTile + 1) + yTile * 32, colour, flipTop,
scale);
if (!isSwimming) {
// lower body
screen.render(xOffset + (modifier * flipBottom), yOffset + modifier, xTile + (yTile + 1) * 32, colour,
flipBottom, scale);
screen.render(xOffset + modifier - (modifier * flipBottom), yOffset + modifier,
(xTile + 1) + (yTile + 1) * 32, colour, flipBottom, scale);
}
}
public boolean hasCollided(int xa, int ya) {
int xMin = 0;
int xMax = 7;
int yMin = 1;
int yMax = 7;
for (int x = xMin; x < xMax; x++) {
if (isSolidTile(xa, ya, x, yMin)) {
return true;
}
}
for (int x = xMin; x < xMax; x++) {
if (isSolidTile(xa, ya, x, yMax)) {
return true;
}
}
for (int y = yMin; y < yMax; y++) {
if (isSolidTile(xa, ya, xMin, y)) {
return true;
}
}
for (int y = yMin; y < yMax; y++) {
if (isSolidTile(xa, ya, xMax, y)) {
return true;
}
}
return false;
}
}
public class Player扩展Mob{
私有InputHandler输入;
private int color=colors.get(-111145543);
私人智力量表=1;
受保护的布尔值Isswiming=false;
私有整数计数=0;
公共播放器(级别,整数x,整数y,输入权限管理器输入){
超级(水平,“玩家”,x,y,1);
这个输入=输入;
}
公共空白勾号(){
int-xa=0;
int-ya=0;
if(input.up.isPressed()){
哎——;
}
if(input.down.isPressed()){
ya++;
}
if(input.left.isPressed()){
xa--;
}
if(input.right.isPressed()){
xa++;
}
如果(xa!=0 | | ya!=0){
移动(xa,ya);
isMoving=真;
}否则{
isMoving=假;
}
if(level.getTile(this.x>>3,this.y>>3).getId()==3){
Isswiming=true;
}
if(isSwimming&level.getTile(this.x>>3,this.y>>3).getId()!=3){
Isswiming=假;
}
tickCount++;
这个比例=1;
}
公共无效渲染(屏幕){
int-xTile=0;
int-yTile=28;
int步行速度=4;
int flipTop=(numSteps>>行走速度)&1;
int flipBottom=(numSteps>>行走速度)&1;
if(movingDir==1){
xTile+=2;
}否则如果(移动方向>1){
xTile+=4+((numSteps>>步行速度)&1)*2;
flipTop=(移动目录-1)%2;
}
整型修饰符=8*刻度;
int xOffset=x-修饰符/2;
int yOffset=y-修饰符/2-4;
如果(Isswiming){
int水彩=0;
yOffset+=4;
如果(滴答声计数%60<15){
水彩=颜色。获得(-1,-1,225,-1);
}else if(15)取决于你如何实现你的游戏地图。如果按网格,你可以让跟随你的角色移动到你以前占用的网格中。我在基于网格的地图上使用16 x 16精灵(500 x 500)。在删除您推荐的内容后,精灵仍在我提供的问题所在的同一个庄园中活动。我不确定我是否有足够的技能来实现让精灵跟随先前占用的网格。您可以使用一个变量来存储以前的网格位置。然后您可以有条件触发NPC跟随你(例如,当你移动到一个新的网格时,触发NPC移动到你以前的网格)基本上就像蛇游戏一样,身体的其他部分将跟随头部。我想感谢你花时间发表评论。你能提供一个我的语法类似的例子吗?