老师,为什么我的java文件夹里只有jdk没有jre?
老师,麻烦您帮我判断一下我的理解:
this的本质是当前对象的地址,也就是说每个构造器里面我初始化本类成员变量,并把成员变量存入当前对象的地址
比如说这个,我是把x,y,img初始化然后存入GameObject类的对象的地址对吗
然后在子弹类中为什么不用this
或者是说this对于成员变量,它仅仅表示调用当前类的成员变量,并将其与形式参数进行区别
但是还是当他调用对象的时候表示对象的地址
综上所述:1、当this调用本类成员方法或变量的时候,它表示的是当前成员变量或成员方法
2、this表示当前对象的地址
老师,请问是不是这样理解的
老师,子类通过super调用的父类的方法是把方法复制过来在子类中执行的还是在父类中执行的?
老师,这个x,y我在构造器里面都已经强制转型过了,但是在fillOval里面还是要我再转一次,不然就报错,请问为什么
继承自GameObject类
谢谢
老师,我附上问题的出现的gif图和代码,您帮我看一下,看了一个小时了,还没有看出问题来,幸苦您一下哈
,谢谢
MyPlaneGame.zip
GIF.gif
game.zip
老师,请您帮我看一下这个代码,我的飞机它不给面子,不动,谢谢
代码部分没有报错,运行结果显示错误。
所对应GameUtil代码
package cn.lss.Game; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import javax.imageio.ImageIO; public class GameUtil { //工具类最好将构造器私有化 private GameUtil() { } public static Image getImage(String path) { BufferedImage bi = null; try { URL u = GameUtil.class.getClassLoader().getResource(path); bi = ImageIO.read(u); }catch (IOException e) { e.printStackTrace(); } return bi; } }
现在执行代码
package cn.lss.Game; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * 飞机游戏的主窗口 * @author 李帅帅 * */ public class MyGameFrame extends JFrame{ Image plane = GameUtil.getImage("images/plane.png"); Image bg = GameUtil.getImage("images/bg.pg"); @Override public void paint(Graphics g) { g.drawImage(bg, 0,0, null); g.drawImage(plane, 200,200, null); } /** * 初始化窗口 */ public void launchFrame() { this.setTitle("尚学堂学员_李帅帅作品"); this.setVisible(true); this.setSize(400,400); this.setLocation(300, 300); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[]args) { MyGameFrame f = new MyGameFrame(); f.launchFrame(); } }
一个炮弹的坐标为(200,200),那50个炮弹的坐标该如何解决,代码中也没有提到,是不用考虑吗?
代码
package cn.lss.Game; import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * 飞机游戏的主窗口 * @author 李帅帅 * */ public class MyGameFrame extends JFrame{ @Override public void paint(Graphics g) { // TODO Auto-generated method stub super.paint(g); } /** * 初始化窗口 */ public void launchFrame() { this.setTitle("尚学堂学员_李帅帅作品"); this.setVisible(true); this.setSize(400,400); this.setLocation(300, 300); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[]args) { MyGameFrame f = new MyGameFrame(); f.launchFrame(); } }
运行无问题
package cn.lss.Game; import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * 飞机游戏的主窗口 * @author 李帅帅 * */ public class MyGameFrame extends JFrame{ @Override public void paint(Graphics g) { g.drawRect(100, 100, 200, 200); } /** * 初始化窗口 */ public void launchFrame() { this.setTitle("尚学堂学员_李帅帅作品"); this.setVisible(true); this.setSize(400,400); this.setLocation(300, 300); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[]args) { MyGameFrame f = new MyGameFrame(); f.launchFrame(); } }
在窗口中画东西,显示黑屏,是电脑配置原因吗?
PlaneGame0.1中可以调出正常窗口。
package cn.lss.Game; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * 飞机游戏的主窗口 * @author 李帅帅 * */ public class MyGameFrame extends JFrame{ /** * 初始化窗口 */ public void launchFrame() { this.setTitle("尚学堂学员_李帅帅作品"); this.setVisible(true); this.setSize(400,400); this.setLocation(300, 300); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[]args) { MyGameFrame f = new MyGameFrame(); f.launchFrame(); } }
PlaneGame0.2中调出的窗口黑色的
package cn.lss.Game; import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.WindowConstants; /** * 飞机游戏的主窗口 * @author 李帅帅 * */ public class MyGameFrame extends JFrame{ @Override public void paint(Graphics g) {//自动被调用。g相当于一支画笔 } /** * 初始化窗口 */ public void launchFrame() { this.setTitle("尚学堂学员_李帅帅作品"); this.setVisible(true); this.setSize(400,400); this.setLocation(300, 300); this.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); } public static void main(String[]args) { MyGameFrame f = new MyGameFrame(); f.launchFrame(); } }
PlaneGame0.9.zip
老师,
MyGameFrame.java里面
(1)怎么理解一组爆炸图片img[i]的依次显示过程?画一次窗口,显示所有的爆炸图片?还是 画一次窗口显示一张图片,画完16次窗口,显示完所有图片?
(2) 图片加载完毕,bao = null。可以理解成:在Explode类中,执行一次drawImage()方法,对应的img[i] = null,显示完一组图片,img数组的值为null,则bao = null?
Explode.java里面
为什么使用for循环输出图片,显示的爆炸效果会不一样呢?而且,飞机消失后,爆炸会继续存在?
PlaneGame0.8.zip
老师,在MyGameFrame.java中为什么定义shells数组以后,直接初始化 编译器会报错?初始化代码要在launch方法中 的原因是什么呢?
PlaneGame0.6.zip
老师,在Plane.java中,需要给飞机的属性speed赋值。为什么要写成int speed = 3。如果写成speed = 3,编译器会报错:VariableDeclaratorId expected after this token。因为,Plane类继承自GameObject类,GameObject类中的成员变量speed 不是private类型,Plane类自动拥有了speed属性啊,就可以直接赋值(speed = 3)。为什么不能直接赋值,而是在Plane类中重新定义成员变量speed呢?
老师,我自己在写PlaneGame0.2项目的时候,把加载图片的代码(Image ball = GameUtil.getImage("images/ball.png");)写到paint()方法里面了,竟然也能显示出来。请问,这句代码写在paint()方法体外面和里面,两种写法有什么区别?写在paint()方法体外面,什么时候会执行getImage()方法呢?(通过调试、看不出来什么时候执行paint()方法)我理解程序的执行顺序是:main()--launch()--paint(),程序是这样执行的吗?
对new的理解不够透彻。
new一般为创建新的对象,为什么在视频里可以new一个类,并无新对象。
代码部分
public class TestSuper02 { public static void main(String[]args) { System.out.println("开始创建一个ChildClass对象。。。。。"); new ChildClass2(); }
非常抱歉给您带来不好的体验!为了更深入的了解您的学习情况以及遇到的问题,您可以直接拨打投诉热线:
我们将在第一时间处理好您的问题!
关于
课程分类
百战程序员微信公众号
百战程序员微信小程序
©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园网站维护:百战汇智(北京)科技有限公司 京公网安备 11011402011233号 京ICP备18060230号-3 营业执照 经营许可证:京B2-20212637