idea学习第三天

绘制红线以及红线的摇摆

线的类

public class Line {
    //起点坐标
    int x=380;
    int y=180;
    //终点坐标
    int endx=500;
    int endy=500;
    //线长
    double length=100;//根据线长和角度计算endx和endy
    double n=0;
    //方向
    int dir=1;

    void paintSelf(Graphics g){

        if(n<0.1){dir=1;}//n的取值应该为0-1,若n<0(转圈到上面了),让线顺时针旋转,dir=1
        else if (n>0.9){dir=-1;}//为保证线在地面下,缩小了n的取值范围
        n=n+0.005*dir;//使角度发生变化
        endx = (int)(x + length * Math.cos(n*Math.PI));//jiaodu是double,endx是int,因此需要强制转化
        endy = (int)(y + length * Math.sin (n*Math.PI));
        g.setColor(Color.red);//添加颜色
        g.drawLine(x,y,endx,endy);//绘制线条
    }
}

 将红线摇摆抽象为直角三角形,线的摆动可以用线长*cos(角度),则endx为

endx = (int)(x + length * Math.cos(n*Math.PI));

其中要保证线在y的正半轴摆动,则角度的取值范围为(0,\pi),则n的取值范围为(0,1)

 此时线的摆动为一圈,限制线的摆动:定义一个方向dir,当线的摆动到达地面时,使方向改变(即if和else if段,详见注释)

并在窗口中不断绘制红线,使用 repaint();

public class GameWin extends JFrame {          //创建窗口

    bg bg=new bg();
    Line line=new Line();
    void launch(){
        this.setVisible(true);                //设置窗口是否可见
        this.setSize(768,1000);   //直接输入数字即可
        this.setLocationRelativeTo(null);     //窗口居中
        this.setTitle("黄金矿工");             //窗口名称

        setDefaultCloseOperation(EXIT_ON_CLOSE);//关闭窗口

        while(true){//死循环
            repaint();//使线段不停的重新绘制,即使线可以进行摇摆

            try {
                Thread.sleep(10);//设置时延
            } catch (InterruptedException e) {
                e.printStackTrace();//编写时会发生异常,直接选择try catch解决
            }
        }
    }

    @Override
    public void paint(Graphics g) {

        bg.paintSelf(g);
        line.paintSelf(g);
    }

    public static void main(String[] args) { //输入psvm直接声明主函数
        GameWin gameWin=new GameWin();
        gameWin.launch();                    //new一个类后才能调用这个类
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值