首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相对于船位的射影集

相对于船位的射影集
EN

Stack Overflow用户
提问于 2013-01-07 11:47:05
回答 2查看 165关注 0票数 1

我正在用Java制作一个自上而下的Shooter克隆。大约一个小时后,我能够计算出如何定位飞船的投射物,这是一个相对于飞船精灵方向的激光。问题是,如果我移动飞船,当我移动飞船时,射弹相对于飞船的方向跟随。正如你所看到的,这是一个问题,因为激光应该独立地移动,而不管它发射时飞船在哪里。

下面是显示我的问题的代码:

代码语言:javascript
复制
private Image ship;
    private int ship_dx = 500;
    private int ship_dy = 400;
    private int ship_velocity = 5;
    private boolean isLaser = false;
    private static final int laser_DyOffSetOfBall = 48;
    private static final int laser_DxOffSetOfBall = 23;
    private Image laser;
    private int laser_dx = ship_dx+laser_DxOffSetOfBall;
    private int laser_dy = ship_dy-laser_DyOffSetOfBall;
    private int laser_velocity= 10;

    public void paintComponent(Graphics g){
        super.paintComponent(g);
        g.drawImage(ship, ship_dx, ship_dy, this);
        if(isLaser){

            laser_dy -= laser_velocity;
            laser_dx = ship_dx+laser_DxOffSetOfBall;
            g.drawImage(laser,laser_dx,laser_dy,this);
            if(laser_dy < 50)
            {
                isLaser = false;
                laser_dy = ship_dy-laser_DyOffSetOfBall;
            }
        }
            Toolkit.getDefaultToolkit().sync();
    }

这就是游戏!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-07 11:54:31

你只需要在第一次绘制时设置激光的x位置,因为否则在每次重新绘制时,激光都会相对于船水平移动。为此,您可以添加另一个布尔值位置(用于激光器的第一次绘制),该值在isLaser first变为true时设置为true,而x isFirst仅在isFirst为true时设置。

代码语言:javascript
复制
boolean isFirst = true;

public void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(ship, ship_dx, ship_dy, this);
    if(isLaser){
        laser_dy -= laser_velocity;
        if(isFirst){

            laser_dx = ship_dx+laser_DxOffSetOfBall;
            isFirst = false;

        }
        g.drawImage(laser,laser_dx,laser_dy,this);
        if(laser_dy < 50)
        {
            isLaser = false;
            laser_dy = ship_dy-laser_DyOffSetOfBall;
        }
    } else {
        isFirst = true;
    }
        Toolkit.getDefaultToolkit().sync();
}
票数 1
EN

Stack Overflow用户

发布于 2013-01-07 11:53:38

错误在行laser_dy = ship_dy - ....

你想绘制与舰船位置无关的弹丸,所以不要使用ship_dy和ship_dy,而是将弹丸startPos存储在单独的变量中,该变量在舰船移动过程中不会改变;

就像这样

代码语言:javascript
复制
laserStartX = ship_dx;
laserStartY = ship_dy;

之后的版本:

代码语言:javascript
复制
laser_dx = laserStartX + laserDxOffsetBall;

laser_dy也是如此

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14189600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档