- 浏览: 5831501 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (890)
- WindowsPhone (0)
- android (88)
- android快速迭代 (17)
- android基础 (34)
- android进阶 (172)
- android高级 (0)
- android拾遗 (85)
- android动画&效果 (68)
- Material Design (13)
- LUA (5)
- j2me (32)
- jQuery (39)
- spring (26)
- hibernate (20)
- struts (26)
- tomcat (9)
- javascript+css+html (62)
- jsp+servlet+javabean (14)
- java (37)
- velocity+FCKeditor (13)
- linux+批处理 (9)
- mysql (19)
- MyEclipse (9)
- ajax (7)
- wap (8)
- j2ee+apache (24)
- 其他 (13)
- phonegap (35)
最新评论
-
Memories_NC:
本地lua脚本终于执行成功了,虽然不是通过redis
java中调用lua脚本语言1 -
ZHOU452840622:
大神://处理返回的接收状态 这个好像没有监听到 遇 ...
android 发送短信的两种方式 -
PXY:
拦截部分地址,怎么写的for(int i=0;i<lis ...
判断是否登录的拦截器SessionFilter -
maotou1988:
Android控件之带清空按钮(功能)的AutoComplet ...
自定义AutoCompleteTextView -
yangmaolinpl:
希望有表例子更好。。。,不过也看明白了。
浅谈onInterceptTouchEvent、onTouchEvent与onTouch
先看图:
小球碰到边上反弹,下面的横杆接住小球让其再反弹上去。很简单,大家都见过的啦。
这里主要练习SurfaceView,Callback以及在SurfaceView中使用线程,看主要的View类:
Activity类:
其他辅助类如下:
适合新手练习用!
小球碰到边上反弹,下面的横杆接住小球让其再反弹上去。很简单,大家都见过的啦。
这里主要练习SurfaceView,Callback以及在SurfaceView中使用线程,看主要的View类:
package com.wt.app; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.Paint.FontMetrics; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.SurfaceHolder.Callback; public class GameView extends SurfaceView implements Callback,Runnable{ private static final String TAG="GameView"; SurfaceHolder holder=null; int x,y=0; int speedX=0,speedY=0; int ball_x,ball_y=0; int ball_speedX=5,ball_speedY=5; int r=5; public GameView(Context context) { super(context); // TODO Auto-generated constructor stub holder=this.getHolder(); holder.addCallback(this); this.setFocusable(true); } public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub } public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub x=(Consts.screenWidth-50)>>1; y=(Consts.screenHeight-10); ball_x=10; ball_y=10; new Thread(this).start(); } public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub } boolean isKeyDown=false; boolean isRunning=true; public void run() { // TODO Auto-generated method stub Paint paint=new Paint(); while(isRunning){ move(); paint(paint); try { Thread.sleep(15); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } private void paint(Paint paint) { // TODO Auto-generated method stub Canvas canvas=holder.lockCanvas(); //刷屏 canvas.drawColor(Color.WHITE); // paint.setColor(Color.WHITE); // canvas.drawRect(0, 0, Consts.screenWidth, Consts.screenHeight, paint); paint.setAntiAlias(true); paint.setStyle(Paint.Style.FILL); paint.setColor(Color.BLACK); canvas.drawRect(x, y, x+50, y+10, paint); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); paint.setColor(Color.RED); canvas.drawCircle(ball_x, ball_y, r, paint); if(gameOver){ paint.setStrokeWidth(1); paint.setColor(Color.RED); paint.setTextSize(25); FontMetrics fm=paint.getFontMetrics(); int textHeight=(int)Math.ceil((fm.descent-fm.top)); float textWidth = paint.measureText("Game Over"); canvas.drawText("Game Over", (Consts.screenWidth-textWidth)/2, (Consts.screenHeight-textHeight)/2, paint); } holder.unlockCanvasAndPost(canvas); } boolean gameOver=false; public void move(){ if(isKeyDown){ x+=speedX; if(x<0){ x=0; } if(x>Consts.screenWidth-50){ x=Consts.screenWidth-50; } } ball_x+=ball_speedX; ball_y+=ball_speedY; if(ball_x<r) ball_speedX=-ball_speedX; if(ball_x>Consts.screenWidth-r) ball_speedX=-ball_speedX; if(ball_y<r) ball_speedY=-ball_speedY; Rect r1=new Rect(); r1.set(x, y, x+50, y+10); Rect r2=new Rect(); r2.set(ball_x-r, ball_y-r, ball_x+r, ball_y+r); if(Tools.isCollideWith(r1, r2)){ ball_speedY=-ball_speedY; } if(ball_y>Consts.screenHeight){ gameOver=true; isRunning=false; } } }
Activity类:
package com.wt.app; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.Display; import android.view.KeyEvent; import android.view.Window; import android.view.WindowManager; public class GameActivity extends Activity { /** Called when the activity is first created. */ private static final String TAG="GameActivity"; GameView view; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //无标题栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); //全屏 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //窗口宽高 DisplayMetrics dm=new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(dm); Consts.screenWidth=dm.widthPixels; Consts.screenHeight=dm.heightPixels; // Consts.screenWidth = this.getWindowManager().getDefaultDisplay().getWidth(); // Consts.screenHeight = this.getWindowManager().getDefaultDisplay().getHeight(); Log.i(TAG,"Consts.screenWidth="+Consts.screenWidth); Log.i(TAG,"Consts.screenHeight="+Consts.screenHeight); // setContentView(R.layout.main); view=new GameView(this); setContentView(view); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub view.isKeyDown=true; switch (keyCode) { case KeyEvent.KEYCODE_DPAD_LEFT: view.speedX=-5; break; case KeyEvent.KEYCODE_DPAD_RIGHT: view.speedX=5; break; } return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // TODO Auto-generated method stub view.isKeyDown=false; view.speedX=0; return super.onKeyUp(keyCode, event); } }
其他辅助类如下:
package com.wt.app; import android.graphics.Rect; public class Tools { public static final boolean isCollideWith(int ax,int ay,int aw,int ah,int bx,int by,int bw,int bh){ if(ay-by>bh||ax-bx>bw||by-ay>ah||bx-ax>aw){ return false; } return true; } public static final boolean isCollideWith(Rect r1,Rect r2){ if(r2.left-r1.left>=r1.width()||r1.left-r2.left>=r2.width()||r2.top-r1.top>=r1.height()||r1.top-r2.top>=r2.height()){ return false; } return true; } }
package com.wt.app; public class Consts { public static int screenWidth; public static int screenHeight; }
适合新手练习用!
发表评论
-
http://www.android-studio.org/
2018-08-06 09:25 0http://www.android-studio.org/ ... -
SlidingDrawer源码
2012-03-14 10:13 3814我把SlidingDrawer源码提了出来,希望对1.5的朋友 ... -
简单拖动效果(带Cache,需要完善)
2011-10-13 15:10 4235如何去实现一个具有幻象的拖拽效果? 所谓”幻象“就是当你按下去 ... -
Android Activity中启动另一应用程序的方法,无需得到类名
2011-08-02 14:46 17276在网上搜索了一会相关的实现代码,发现所有的文章都说是需要包名和 ... -
java-universal-tween-engine,一个动画系统库
2011-06-29 09:21 6752http://code.google.com/p/java-u ... -
网上发现的一个android UI包
2011-05-24 12:21 4137里面有些UI和效果 -
android中使用代码启动其他程序
2011-04-29 23:15 5318你要訪問其他的程序,那麼這個程序要先裝載到模擬器或真機上面,因 ... -
listView背景问题以及限制editText字数以及如果想通知别人已经不能在写
2011-04-29 22:44 32171.在listView设置好背景之后 你如果点击空白出 你会发 ... -
Android键盘和触摸事件处理
2011-04-29 22:32 7012activity和VIEW都能接收触摸和按键,如果响应事件只需 ... -
Android的绘制文本对象FontMetrics的介绍及绘制文本
2011-04-29 22:29 11504一。Android绘制文本对象FontMetrics介绍 ... -
Android View 拖动&插入
2011-04-29 22:20 3554View 拖动&插入 即: 支持 拖动图标 然后 ... -
使TextView文本可以水平和垂直滚动
2011-04-29 21:59 14441在做一个小的电子书程序,要求电子书具有放大缩小的功能,所以肯定 ... -
ArrayAdapter源码
2011-04-29 12:29 6311看看人家怎么写的。 /* * Copyright (C ... -
Android下获取开机时间
2011-04-02 21:51 6239找了一圈没发现能得到开机启动时间资料,于是乎突发奇想,得到了解 ... -
AutoCompleteTextView连接到数据库
2011-03-30 20:49 4740AutoCompleteTextView可以根据输入 ... -
改变屏幕Brightness(亮度)
2011-03-30 12:48 4610http://www.eoeandroid.com/forum ... -
android 拖拽图片&拖动浮动按钮到处跑
2011-02-24 20:55 31786来自老外: import android.app.Acti ... -
拖动一个控件在另一个控件(layout)上,并固定位置在几个位置显示
2011-02-24 20:51 5903实现效果: 鼠标拖动btn SSS,SSS在水平的layo ... -
Handler与Message类,实现n秒后无操作自动消失功能
2011-02-24 20:45 4652实现功能:某控件不操作10秒后,自动消失。如照相机变焦条出现后 ... -
带删除按钮的ListView
2011-02-24 10:33 6158不用说了,上图先: import java.util.A ...
相关推荐
bounce_count :小球弹跳次数 ball_color:小球颜色 ball_count:小球数量 ball_radius:小球半径 ball_delay:小球出现时间间隔(当小球数大于1时) anim_duration:小球一次动画时长 physic_mode : 开启物理效果(下落...
一个小游戏,游戏中玩家通过触屏产生小球,触碰的时间控制小球的大小,释放时的...小球产生过程中被其它小球碰撞则游戏结束。游戏任务是产生有限个小球占满一定比例的空间。游戏中会有各种小道具帮助玩家完成任务……
7. 小球碰撞问题:小球A与静止的小球B碰撞后,小球A的动能变为原来的1/9,这涉及到动能和动量守恒的联合应用。通过动量守恒和动能的改变,可以求出碰撞后B球的速度。 8. 质量不等的碰撞:质量不等的两个物体碰撞时...
在Android开发中,创建引人入胜的交互式UI元素是一项重要的任务,"Android 弹力小球实例"就是这样一个示例,它结合了物理模拟和动画效果,为用户提供了一个有趣的体验。在这个实例中,我们将深入探讨如何实现小球的...
3. **图形渲染**:可能使用Android的Canvas或OpenGL ES进行棋盘和小球的绘制。 4. **用户交互**:触摸事件处理,使用户可以移动小球或进行其他操作。 5. **多线程**:如果游戏有实时性需求,可能涉及多线程处理。 6....
4. **游戏结束**:一旦检测到小球与骷髅头瓷砖碰撞,游戏结束,显示游戏结束界面,并提供重新开始选项。 **优化与扩展** 为了提高游戏体验,可以考虑以下优化和扩展: - **动画效果**:为小球和瓷砖添加动态效果...
COMSOL光学模型:手性小球
在Android开发中,"android拖动小球demo"是一个典型的触摸事件处理与图形绘制的实践案例...实际项目中,还可以根据需求扩展,例如添加物理模拟效果,使小球有真实的运动轨迹,或者添加碰撞检测,让小球与其他元素互动。
4. **碰撞检测与处理**:判断小球是否与障碍物发生碰撞,碰撞则游戏结束,否则继续游戏。 5. **得分系统**:每当小球成功避开一个障碍物,得分增加,展示实时得分。 【标签】中的"游戏"、"python"和"pygame"进一步...
在物理学中,小球碰撞是一个常见的力学问题,涉及到动量守恒、能量守恒以及碰撞的类型等基础知识。在这个特定的场景中,我们有两个小球,一个是从上方垂直下落,另一个则是静止在下方。当这两个小球发生碰撞时,它们...
Android 小球碰撞检测技术
根据提供的信息,我们可以总结出以下有关“C++小球碰撞”的相关知识点: ### C++小球碰撞概述 在计算机编程领域,“C++小球碰撞”通常指的是使用C++语言实现的小球之间的碰撞检测与响应机制。此类程序常用于游戏...
- 检查边界碰撞,当小球碰到Canvas边缘时,改变其运动方向。例如,如果`y + radius > canvas.height`,则反转小球的垂直速度`velocityY = -velocityY;`。 5. **事件处理**: - 可以添加鼠标交互,比如点击小球...
本项目“Android小球重力感应运动(有碰撞声)源码”提供了一个完整的示例,展示了如何利用Android的传感器API来捕捉设备的重力变化,使屏幕上的小球模拟真实世界的物理运动,并在碰撞时产生声音反馈。 首先,我们...
碰撞检测通常是通过比较两个物体(如小球)的边界距离来判断是否发生碰撞。如果两者的边界距离小于两者半径之和,那么可以认为它们发生了碰撞。 【用户界面设计】 VB中的Form是用户界面的基础,开发者可以通过拖放...
在本文中,我们将深入探讨如何使用VC++6.0中的MFC(Microsoft Foundation Classes)库来模拟小球碰撞的过程。MFC是微软提供的一套C++类库,它简化了Windows应用程序的开发,特别是图形用户界面(GUI)的构建。 首先...
在Android游戏开发的基础阶段,小球运动是一个常见的学习主题,它可以帮助开发者理解基本的游戏物理引擎、碰撞检测以及动画原理。这个教程可能包含了如何创建一个简单的2D游戏,其中一个小球在屏幕上移动并与其他...
在本文中,我们将深入探讨如何使用C语言实现小球碰撞的程序。小球碰撞问题是一个经典的动力学问题,常用于游戏开发、物理模拟等领域。它涉及到速度、位置、角度等关键概念,以及动量守恒和能量守恒的物理原理。 ...
小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 小球碰撞 课程设计 ...
2. **碰撞检测**:当小球到达地面时,需要检测碰撞,使小球反弹。这可以通过比较小球的中心位置和地面的位置来实现。 3. **弹性碰撞**:碰撞后,小球的速度方向会反转,但速度大小会受到弹性系数(通常小于1)的...