重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你的程序主要是因为MyPanel覆盖了MyFrame,把监听移到MyPanel上,并让它获得焦点(用this.requestFocus();语句),键盘控制就可以运行了.
成都创新互联专注于历下网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供历下营销型网站建设,历下网站制作、历下网页设计、历下网站官网定制、成都小程序开发服务,打造历下网络公司原创品牌,更为您提供历下网站排名全网营销落地服务。
另外,你的Image获取方式有一点问题,我给你都改成new ImageIcon(imgpath).getImage()的形式了.
其它的改动都是小地方,你对照着原程序一看就知道了.
改完后,完整的程序如下:
//MyFrame.java文件
import javax.swing.JFrame;
public class MyFrame extends JFrame{
MyPanel mp=null;
public void lostFrame(){
mp=new MyPanel();
this.setTitle("雷霆战机");
this.setLocation(10, 10);
this.setVisible(true);
this.setSize(500,500);
this.add(mp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
//PlaneGame.java文件
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
//主窗口
public class PlaneGame{
public static void main(String[] args) {
new MyFrame().lostFrame();
}
}
//监听事件
class moveList extends KeyAdapter{
public void keyPressed(KeyEvent e) {
System.out.println("按下"+e.getKeyChar());
}
public void keyReleased(KeyEvent e) { }
}
//继承JPanel在面板上画图片
class MyPanel extends JPanel{
Image bg=new ImageIcon("image/bg.gif").getImage();
Plane p=new Plane("image/enemy2.png",100,100);
MyPanel(){
addKeyListener(new moveList());
}
public void paint(Graphics g){
g.drawImage(bg, 0, 0,null); p.draw(g); repaint();
this.requestFocus();
}
}
//Plane.java文件
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
// 战机的属性
public class Plane {
int y;
int x;
Image img;
double speed=0.1;
public Plane( String imgpath,int x, int y) {
this.x = x;
this.y = y;
this.img =new ImageIcon(imgpath).getImage();
}
public void draw(Graphics g){
g.drawImage(img, x, y, null);
}
}
开放注册以前,本人以游客身份学习了各位大大的教程已成功破解了30多款游戏!现在把我的学到的告诉大家!
---------------------------------手机端破解:破解工具:Dalvik字节码编辑器(百度下载)---------------------------------破解方法:
1:此方法比较简单 但是仅适用于少数游戏(雷霆战机2) 打开Dalvik字节码编辑器(以下简称 工具) 找到所要破解的游戏 点击进入 会有几个文件和文件夹,接着打开文件 classes.dex
一样有许多文件和文件夹 点击手机的菜单键(不要跟我说菜单键找不到!手机屏幕下方的那三个触摸键!) 选择搜索字符串 搜索 gc_billing_fail 一样会有3个文件 选择 cn\emagsoftwarel\gamebilling\view\$1 然后也有三种选择 选择methods onbillingsuccess内容全部复制把onuselopercallcer内容删除,再粘贴再把onbillingfair的内容删除,再粘贴,然后一直保存,回退到刚打开安装包的那个页面打开Androidmanifest.html 以后删除此代码: android permisson sends sms(删除这个是踢除游戏发送短信的权限) 最后保存。保存成功后,会在原来的游戏安装包下面出来自己破解的安装包!安装即可!(如果未破解的版本安装了的话,先卸载!再安装破解版!不然两个软件签名不同,不能安装)------------------------------!搜索的gc_billing_fail称之为游戏的string,每个游戏都有string,而找到string需要将apk反编译(手机端反编译利器apktool)----------------------------------
2:用到的工具还是一样,此方法大多数游戏都能破解,唯一的缺点就是麻烦,费时!还要得懂点代码的意思
游戏中,付费成功会有:购买成功、支付成功、已购买等等的提示语!付费失败则反之!---------------------------------首先第一步:安装游戏,进游戏查看其提示语是什么!我自己破解的游戏过程(狂斩三国—单击版) “支付失败”呵呵!那就简单了! 用工具打开安装包打开classes.dex菜单键 选择搜索字符串 搜索:支付失败 有三个文件 起初我是把三个文件里的都修改了!才知道这样会乱码 程序不能运行,三个支付失败的方法中只有一个是真正实现跳转的,那么,我能不能给三个文件中的支付失败的提示语后面标上1,2,3,呢?再保存安装包,安装运行游戏,看看到底那个才是实现跳转的,于是乎,付费失败提示“支付失败3”嘿嘿!这就简单了!用工具打开刚修改过得安装包搜索:支付失败3 就会出来文件 选择打开 下面我把代码粘贴过来讲解!带()的是我的注解
const/16 v0 0x9if-ne v6 v0 :label_21(这个代码的意思是:如果什么什么的值不为0就跳转到label_21 这个就是跳转命令,我们要看看它跳转项的内容是什么)invoke-static {} Lcn/koogame/market/MarketLogic;-getInstance()Lcn/koogame/market/MarketLogic;move-result-object v0invoke-static {} Lcn/koogame/market/MarketLogic;-getInstance()Lcn/koogame/market/MarketLogic;move-result-object v1iget-object v1 v1 Lcn/koogame/market/MarketLogic;-alixBPID:Ljava/lang/String;const/4 v2 1const-string v3 "支付成功"invoke-virtual {v0,v1,v2,v3} Lcn/koogame/market/MarketLogic;-payCallback(Ljava/lang/String;ILjava/lang/String;)Vlabel_20:return-voidlabel_21:(跳转项-----------------以下便是label_21的内容)invoke-static {} Lcn/koogame/market/MarketLogic;-getInstance()Lcn/koogame/market/MarketLogic;move-result-object v0invoke-static {} Lcn/koogame/market/MarketLogic;-getInstance()Lcn/koogame/market/MarketLogic;move-result-object v1iget-object v1 v1 Lcn/koogame/market/MarketLogic;-alixBPID:Ljava/lang/String;const/4 v2 0const-string v3 "支付失败3"(支付失败!嘿嘿!直接把支付失败的跳转项删除,再把开头的跳转命令删除 然后保存)invoke-virtual {v0,v1,v2,v3} Lcn/koogame/market/MarketLogic;-payCallback(Ljava/lang/String;ILjava/lang/String;)Vgoto :label_20----------------------------------下面把我修改过后的代码粘贴过来,大家可以对照下----------------------------------
const/16 v0 0x9
invoke-static {} Lcn/koogame/market/MarketLogic;-getInstance()Lcn/koogame/market/MarketLogic;move-result-object v0invoke-static {} Lcn/koogame/market/MarketLogic;-getInstance()Lcn/koogame/market/MarketLogic;move-result-object v1iget-object v1 v1 Lcn/koogame/market/MarketLogic;-alixBPID:Ljava/lang/String;const/4 v2 1const-string v3 "支付成功"invoke-virtual {v0,v1,v2,v3} Lcn/koogame/market/MarketLogic;-payCallback(Ljava/lang/String;ILjava/lang/String;)Vlabel_20:return-void
invoke-virtual {v0,v1,v2,v3} Lcn/koogame/market/MarketLogic;-payCallback(Ljava/lang/String;ILjava/lang/String;)Vgoto :label_20
不要用键盘监听,键盘事件只会传递给当前获得焦点的组件。
使用按键映射,绑定InputMap和ActionMap,具体做法可以自己搜相关内容。
雷霆战机上有一个闪光的点,被攻击到就会掉血,你可以根据获取到屏幕宽度比如是800和高度1400,来设置这个点的活动范围,上下活动范围在(50,1350)之间,左右设置在(50,750)之间,是否选择50或者80看你的飞机图片大小,你想让飞机都在屏幕上,那就的计算飞机图片的大小,根据飞机中心点到飞机边缘(左右)是70px,那你就选择70,但是这些值和飞机的大小都不能是固定值,一定要按照不同手机的屏幕大小来设置飞机的大小来满足不同玩家的视觉效果,具体设置多少值,你可以多拿几个不同屏幕的手机来运行来试,如果你懒得一个个去试,可以把你飞机距离屏幕的距离可以设置为一个百分值,可以将这些之值写入一个list中 只要获取的到屏幕大小,就按照list中的值来取就行了。希望对你有帮助。