- 浏览: 64666 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
endual:
大哥,您好歹第一句话说:记得配置android连接网络的权限哦 ...
android网络连接总结 -
左手风袖:
能否共享一下代码?
android 应用类APP开发小结——android Google map 小应用 -
yjdzh:
可以共享一下代码嘛
android 应用类APP开发小结——android Google map 小应用 -
ec256:
你好,我有个问题想请教,Sensor 在service中可以 ...
android 应用类APP开发小结——android Google map 小应用 -
nonoh2006:
你好,我的一个程序之中也需要使用的传感器和GPS相关信息的实施 ...
android 应用类APP开发小结——android Google map 小应用
snake:是通过send和receive MSG方法来实现视图的跟新。invalidate()
sudokuv:是也是通过invalidate跟新视图。由于没有自更新。所以视图变化发生在按键事件
jetboy:类似lunarlander
LunarLander:是通过线程在RUN方法中while(TRUE)中一直执行dodraw方法。其中它需要取得屏幕的canvas
1.extends view。这个方法所有的绘制都在onDraw()函数里进行,通过调用invalidate()通知系统调用onDraw()重绘屏幕,但是如果是在非UI线程中请求重绘就不一样了,具体怎么做大家自己去看看相关的东西。我没有看过,因为一般游戏开发我们会选择下一种方法。
2.extends SurfaceView,这是游戏开发最常用的方式,应该说如果你的游戏需要不停的更新图像,比如有帧动画的播放等等,那么就采用这种方式吧。
surfaceview的方式下你需要 implements SurfaceHolder.Callback
class SurfaceViewCore extends SurfaceView implements SurfaceHolder.Callback
LunarLander
class LunarView extends SurfaceView implements SurfaceHolder.Callback { public LunarView(Context context, AttributeSet attrs) { super(context, attrs); // register our interest in hearing about changes to our surface SurfaceHolder holder = getHolder(); holder.addCallback(this); // create thread only; it's started in surfaceCreated() thread = new LunarThread(holder, context, new Handler() { @Override public void handleMessage(Message m) { mStatusText.setVisibility(m.getData().getInt("viz")); mStatusText.setText(m.getData().getString("text")); } }); setFocusable(true); // make sure we get key events } @Override public void onWindowFocusChanged(boolean hasWindowFocus) { if (!hasWindowFocus) thread.pause(); } public void surfaceCreated(SurfaceHolder holder) { // start the thread here so that we don't busy-wait in run() // waiting for the surface to be created thread.setRunning(true); thread.start(); } public void surfaceDestroyed(SurfaceHolder holder) { // we have to tell thread to shut down & wait for it to finish, or else // it might touch the Surface after we return and explode boolean retry = true; thread.setRunning(false); while (retry) { try { thread.join(); retry = false; } catch (InterruptedException e) { } } } class LunarThread extends Thread { public LunarThread(SurfaceHolder surfaceHolder, Context context, Handler handler) { // get handles to some important objects mSurfaceHolder = surfaceHolder; mHandler = handler; mContext = context; } public void run() { while (mRun) { Canvas c = null; try { c = mSurfaceHolder.lockCanvas(null); synchronized (mSurfaceHolder) { if (mMode == STATE_RUNNING) updatePhysics(); doDraw(c); } } finally { // do this in a finally so that if an exception is thrown // during the above, we don't leave the Surface in an // inconsistent state if (c != null) { mSurfaceHolder.unlockCanvasAndPost(c); } } } } public void setState(int mode, CharSequence message) { synchronized (mSurfaceHolder) { mMode = mode; if (mMode == STATE_RUNNING) { Message msg = mHandler.obtainMessage(); Bundle b = new Bundle(); b.putString("text", ""); b.putInt("viz", View.INVISIBLE); msg.setData(b); mHandler.sendMessage(msg); } else { if (message != null) { str = message + "\n" + str; } if (mMode == STATE_LOSE) mWinsInARow = 0; Message msg = mHandler.obtainMessage(); Bundle b = new Bundle(); b.putString("text", str.toString()); b.putInt("viz", View.VISIBLE); msg.setData(b); mHandler.sendMessage(msg); } } } private void doDraw(Canvas canvas) { } } }
Snake
public class SnakeView extends TileView { private static final Random RNG = new Random(); private RefreshHandler mRedrawHandler = new RefreshHandler(); class RefreshHandler extends Handler { @Override public void handleMessage(Message msg) { SnakeView.this.update(); SnakeView.this.invalidate(); } public void sleep(long delayMillis) { this.removeMessages(0); sendMessageDelayed(obtainMessage(0), delayMillis); } }; public SnakeView(Context context, AttributeSet attrs) { super(context, attrs); initSnakeView(); } public SnakeView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initSnakeView(); } private void initSnakeView() { setFocusable(true); } private void initNewGame() { } public void update() { mRedrawHandler.sleep(mMoveDelay); } } }
发表评论
-
android快速入门指南
2010-08-12 09:52 5216为了参加 ” 首届 ... -
android 应用类APP开发小结——android Google map 小应用
2010-07-31 19:21 7817首届Google暑期大学生博客分享大赛——2010 Andri ... -
android游戏开发全解
2010-07-28 14:14 402首届Google暑期大学生博客分享大赛——2010 Andri ... -
首届Google暑期大学生博客分享大赛——2010 Andriod篇
2010-07-28 13:53 199基于android平台地理定位的信息服务系统设计与开发 项目主 ... -
android imagebutton
2010-05-16 16:30 1372自己懒的些。就转了一篇。这篇还算全 http://blog.c ... -
android mapview 学习总结
2010-04-21 10:53 3099mapview 和其他控件一起显示(原文http://lord ... -
android 多层布局就这么简单
2010-04-17 12:59 4165效果图 要实现以上功能其实很简单。只要将布局比方说R ... -
环境配置
2010-04-13 20:20 1142windows: ubuntu: eclipse adt: ... -
selector
2010-04-09 09:25 1788<selector android:id=" ... -
android游戏音效
2010-04-05 18:45 4049背景音循环有间隔问题 getCurrentPosition() ... -
android 线程更新view及数据传送
2010-04-05 13:35 3462很多新手在启动新线程更新view时会出现 “Only the ... -
android ui imagebutton
2010-04-05 10:07 2032drawable/imagebutton.xml & ... -
android图形图像
2010-03-29 11:43 2942一、 android.graphics.Matr ... -
android动画总结
2010-03-29 11:41 1532逐帧动画(frame-by-frame animation), ... -
Android应用及应用管理简介
2010-03-27 15:51 3178转至http://space.itpub.net/21 ... -
android网络连接总结
2010-03-27 15:17 5526一:HttpURLConnection URL sou ... -
学习资源
2010-03-26 11:01 868http://android.tgbus.com/Androi ... -
一些记号贴(不完整仅入入门)
2010-03-26 10:26 874Intent的常见用法 原帖 http://rayleung. ... -
更新游戏画面时线程的问题
2010-03-26 10:18 1300作者daytodayme http://www.iteye.c ... -
android开发——小细节笔记
2010-03-25 13:36 3032全屏去状态栏 Window window = getW ...
相关推荐
总结来说,"MarsLander"游戏源码提供了一个很好的学习平台,涵盖了Android开发中多线程、SurfaceView、物理模拟、事件处理和资源管理等多个重要知识点。通过分析和研究这个源码,初学者能够深入理解Android游戏开发...
《LunarLander: Android版月球着陆器游戏》是一款基于Java开发的移动平台游戏,旨在模拟真实的月球登陆体验。在这个游戏中,玩家需要控制一个太空飞船在月球表面安全着陆,同时避开各种障碍物,这既考验了玩家的操作...
近端策略优化Proximal Policy Optimization (PPO) 算法:从原理到实践 参考博客:https://blog.csdn.net/weixin_44584198/article/details/135513841
总结来说,"lunarlander:90分钟的榆树,月球着陆器"是一个用Elm语言实现的编程挑战,它不仅展示了Elm语言的高效性和安全性,还让我们看到了如何用函数式编程思想来构建一个动态的、交互式的游戏应用。通过学习和分析...
总的来说,"LunarLander"项目涵盖了Android应用开发的多个方面,对于初学者来说是一个很好的实践机会,可以帮助他们深入理解和掌握Android游戏开发的关键技术。通过研究这个项目,开发者不仅可以提升编程技能,还能...
基于LunarLander登陆器的A2C强化学习(含PYTHON工程)基于TensorFlow 参考博客:https://blog.csdn.net/weixin_44584198/article/details/135196790
完全使用DOM和JavaScript制作的科幻生存射击游戏 启动月球着陆器Beta 托管是昂贵的大声笑。 找到托管说明。 控制项 行动 键盘 双重冲击4 促进 Space X 向左旋转 A L1 右旋 D R1 信息 E Triangle 射击 F ...
为了实现流畅的动画效果,我们需要在每帧中更新游戏状态,并确保帧率稳定。 游戏中的关卡设计也是关键。我们可以借鉴Lunar Lander的模式,设置不同难度的着陆区域,增加障碍物和奖励,提高游戏的可玩性。利用XML...
pytorch-LunarLander OpenAI Gym中针对LunarLander-v2环境的不同Deep RL算法的PyTorch实现 我们实施了3种不同的RL算法来解决LunarLander-v2环境: 模仿学习 加强 优势-演员-批评(A2C) 注意:模仿学习是在Keras...
在技术实现上,LunarLander的开发可能利用了Java的多线程特性,以确保加速度计的实时更新和用户界面的同步响应。同时,为了优化游戏性能,开发者可能采用了面向对象的设计模式,如单例模式(Singleton)来管理全局...
3. **游戏循环**:游戏的核心循环,包括更新游戏状态、渲染屏幕、处理用户输入和时间管理。 4. **图形渲染**:可能涉及到DirectX或OpenGL等图形库,用于在屏幕上显示登月飞船和月球表面。 5. **物理模拟**:可能...
在原始游戏中,游戏的地形参差不齐,只有几个平坦的区域可以降落。 另外,玩家必须检查其燃料,否则着陆器将坠毁。 为了控制着陆器,玩家必须使用着陆器的推进器来减慢或加速飞行器。 但是,那只是原始的游戏版本,...
基于OpenAI LunarLander-v2 DeepRL的解决方案使用深度Q网络(DQN),决斗DQN和决斗双DQN(D3QN) 在硕士论文“基于DeepRL的室内移动机器人导航运动计划”的制定下进行的调查@ @系统与机器人研究所-科英布拉大学(ISR...
总结来说,PyTorch-LunarLander项目是一个实践PPO算法的优秀实例,它展示了如何将强化学习应用于解决复杂控制问题,同时,也为Python开发者提供了一个学习和研究深度强化学习的宝贵资源。通过研究这个项目,我们不仅...
内容概要:本文详细介绍了如何使用OpenAI Gym库中的CartPole和LunarLander环境来训练和评估深度强化学习算法,如DQN及其变体(Duelling DQN和Double DQN)。文档涵盖了环境安装、PyTorch的使用、损失函数的设计、...
基于LunarLander登陆器的强化学习案例(含PYTHON工程)基于TENSORFLOW 2.10.0参考博客:https://blog.csdn.net/weixin_44584198/article/details/134757481
信赖域策略优化算法TRPO强化学习-运用实践,基于LunarLander登陆器的TRPO强化学习(含PYTHON工程)。 参考博客:https://blog.csdn.net/weixin_44584198/article/details/135484701 train.py进行训练 test.py进行...
离散环境:LunarLander-v2 连续环境:Pendulum-v0 DQN -- VPG -- DDPG -- TD3 -- SAC -- PPO -- 用法: 只需直接运行文件/算法。 在我学习算法时,它们之间没有通用的结构。 不同的算法来自不同的来源...
强化学习Soft Actor-Critic算法。参考博客:https://blog.csdn.net/weixin_44584198/article/details/135546087 基于LunarLander登陆器的Soft Actor-Critic强化学习(含PYTHON工程)
强化学习之精确登月小艇着陆挑战:基于DQN算法与PyTorch框架的实战训练策略保存与读取-LunarLander-v2环境应用,强化学习代码-利用DQN的方法实现登月小艇的精确登陆-001 可以保存和读取训练的策略,pytoch实现 ...