- 浏览: 157680 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
沙舟狼客:
为了方便使用可以配置到环境变量里面MINGW_HOME=C:\ ...
windows下用mingw32+sdl进行简单2d游戏开发(c语言) -
沙舟狼客:
如果安装autotools时不用gcccc相当于gcc的链接n ...
windows下用mingw32+sdl进行简单2d游戏开发(c语言) -
lirihong:
java中文乱码完全解决方案 ?? 高度很高,深度、全面度全 ...
java中文乱码完全解决方案 -
沙舟狼客:
非常适合想写windows游戏的菜鸟
windows下用mingw32+sdl进行简单2d游戏开发(c语言) -
xixilive:
噢喔~~语义全无
京东导航的jquery实现
1、代码:
package org.ligson.jogl.test; import java.awt.BorderLayout; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.media.opengl.GL; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCanvas; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; import javax.swing.JFrame; import org.ligson.jogl.test.SnakeDemo.Dir; /* * 事物只有一个 */ public class SnakeDemo extends JFrame implements GLEventListener, Runnable, KeyListener { //产生食物随机坐标 Random random = new Random(); //枚举方向 enum Dir { UP(1), DOWN(2), LEFT(3), RIGHT(4); final int d; private Dir(int d) { this.d = d; } public int getDir() { return this.d; } } //速度 float speed = 10.0f; //长度 int len = 5; // gl库的handler,相当于画笔 GL gl; // 画布 GLCanvas canvas; // 指定了一套OpenGL的功能:渲染内容必须支持,如色彩深度,以及立体是否已启用。 GLCapabilities capabilities; Thread thread = new Thread(this); //蛇集合 List<Snake> snakes = new ArrayList<Snake>(); //食物集合 List<Food> foods = new ArrayList<Food>(); public SnakeDemo() { super("Demo4"); this.setSize(500, 500); //屏幕中心 this.setLocationRelativeTo(null); this.setResizable(false); capabilities = new GLCapabilities(); canvas = new GLCanvas(capabilities); canvas.addGLEventListener(this); this.addKeyListener(this); this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); this.add(canvas, BorderLayout.CENTER); thread.start(); } @Override public void run() { while (true) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } canvas.display(); //检查撞击 checkHit(); } } @Override public void display(GLAutoDrawable drawable) { gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glClear(GL.GL_DEPTH_BUFFER_BIT); gl.glEnable(GL.GL_DEPTH_TEST); gl.glColor3f(1.0f, 0.0f, 0.0f); painSnakes(); painFoods(); gl.glFlush(); } @Override public void displayChanged(GLAutoDrawable drawable, boolean arg1, boolean arg2) { } @Override public void init(GLAutoDrawable drawable) { gl = drawable.getGL(); gl.glClearColor(0.3f, 0.3f, 0.3f, 1.0f); gl.glShadeModel(GL.GL_FLAT); gl.glFrontFace(GL.GL_CW); //初始化蛇 for (int i = 0; i < len; i++) { Snake snake = new Snake(10.0f, 10.0f, 0.0f, i * 10.0f, Dir.UP); snakes.add(snake); } //初始化食物 Food food = new Food(10.0f, 10.0f, random.nextInt(250), random.nextInt(250)); foods.add(food); } @Override public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { if (h == 0) { h = 1; } int windowWidth; int windowHeight; gl.glViewport(0, 0, w, h); gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); if (w <= h) { windowWidth = 250; windowHeight = 250 * h / w; } else { windowWidth = 250 * w / h; windowHeight = 250; } //重新定义世界坐标系,以窗口中心为(0,0,0) gl.glOrtho(0 - windowWidth, windowWidth, 0 - windowHeight, windowHeight, 250.0f, -250.0f); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); } public static void main(String[] args) { SnakeDemo demo = new SnakeDemo(); demo.setVisible(true); } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); switch (key) { case KeyEvent.VK_UP: //防止向相反方向走 if (snakes.get(0).getDir() != Dir.DOWN) { snakes.get(0).setDir(Dir.UP); } break; case KeyEvent.VK_DOWN: if (snakes.get(0).getDir() != Dir.UP) { snakes.get(0).setDir(Dir.DOWN); } break; case KeyEvent.VK_LEFT: if (snakes.get(0).getDir() != Dir.RIGHT) { snakes.get(0).setDir(Dir.LEFT); } break; case KeyEvent.VK_RIGHT: if (snakes.get(0).getDir() != Dir.LEFT) { snakes.get(0).setDir(Dir.RIGHT); } break; case KeyEvent.VK_EQUALS: len++; break; case KeyEvent.VK_MINUS: len--; if (len < 1) { len = 1; } break; default: break; } } @Override public void keyReleased(KeyEvent e) { } private void painSnakes() { int abs = len - snakes.size(); if (abs > 0) { for (int i = 0; i < abs; i++) { Snake lastSnake = snakes.get(snakes.size() - 1); Snake newSnake = new Snake(10.0f, 10.0f, lastSnake.getX() + 10, lastSnake.getY() + 10, lastSnake.getDir()); snakes.add(newSnake); } } else if (abs < 0) { for (int i = 0; i < -abs; i++) { snakes.remove(snakes.size() - 1); } } for (int i = snakes.size() - 1; i >= 1; i--) { Snake tmpSnake = snakes.get(i); Snake prevSnake = snakes.get(i - 1); tmpSnake.setX(prevSnake.getX()); tmpSnake.setY(prevSnake.getY()); tmpSnake.setDir(prevSnake.getDir()); } Snake snake = snakes.get(0); int h = getContentPane().getHeight(); int w = getContentPane().getWidth(); switch (snake.getDir().getDir()) { case 1: if ((snake.getY() + speed - 10.0f) > (h / 2.0)) { snake.setY(-250.0f); } else { snake.setY(snake.getY() + speed); } break; case 2: if ((snake.getY() + speed + snake.getHeight()) < -(h / 2.0)) { snake.setY(250.0f); } else { snake.setY(snake.getY() - speed); } break; case 3: if ((snake.getX() + speed + snake.getWidth()) < -(w / 2.0)) { snake.setX(250.0f); } else { snake.setX(snake.getX() - speed); } break; case 4: if ((snake.getX() + speed - 10.0f) > (w / 2.0)) { snake.setX(-250.0f); } else { snake.setX(snake.getX() + speed); } break; } snakes.set(0, snake); for (Snake snake2 : snakes) { snake2.pain(gl); } } private void painFoods() { if (foods.size() == 0) { Food food = new Food(10.0f, 10.0f, random.nextInt(250), random.nextInt(250)); foods.add(food); } for (Food food : foods) { food.pain(gl); } } private void checkHit() { for (Snake snake : snakes) { for (Food food : foods) { if (Math.abs(snake.getX() - food.getX()) < 10.0f && Math.abs(snake.getY() - food.getY()) < 10.0f) { len++; foods.remove(food); break; } } } } } class Food { private float width = 10.0f; private float height = 10.0f; private float x = 0.0f; private float y = 0.0f; public Food(float width, float height, float x, float y) { super(); this.width = width; this.height = height; this.x = x; this.y = y; } public float getWidth() { return width; } public void setWidth(float width) { this.width = width; } public float getHeight() { return height; } public void setHeight(float height) { this.height = height; } public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public void pain(GL gl) { gl.glBegin(GL.GL_QUADS); gl.glVertex3f(this.x, this.y, 0.0f); gl.glVertex3f(this.x, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y, 0.0f); gl.glEnd(); } } class Snake { private float width = 10.0f; private float height = 10.0f; private float x = 0.0f; private float y = 0.0f; private Dir dir = Dir.UP; private Random random = new Random(); public Snake(float width, float height, float x, float y, Dir dir) { super(); this.width = width; this.height = height; this.x = x; this.y = y; this.dir = dir; } public float getWidth() { return width; } public void setWidth(float width) { this.width = width; } public float getHeight() { return height; } public void setHeight(float height) { this.height = height; } public float getX() { return x; } public void setX(float x) { this.x = x; } public float getY() { return y; } public void setY(float y) { this.y = y; } public Dir getDir() { return dir; } public void setDir(Dir dir) { this.dir = dir; } public float[] getPoints() { return null; } public void pain(GL gl) { gl.glColor3f(random.nextFloat(), random.nextFloat(), random.nextFloat()); gl.glBegin(GL.GL_QUADS); gl.glVertex3f(this.x, this.y, 0.0f); gl.glVertex3f(this.x, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y + height, 0.0f); gl.glVertex3f(this.x + width, this.y, 0.0f); gl.glEnd(); } public String toString() { return "X:" + this.x + ";Y:" + this.y; } }
2、jogl需要的库
http://ligson.iteye.com/blog/1331528
发表评论
-
java中文乱码完全解决方案
2013-11-18 22:05 23511、代码编码全部用UTF8,特别是配置用的属性文件 2、J ... -
Highcharts动态曲线图(使用jna监视cpu使用率)
2012-01-10 22:30 91801、CPU使用率获取,因为我要用JNA调用,所以用c++调用w ... -
grails验证码插件-JCaptcha
2012-01-10 12:56 23331、安装 grails install-plugin jca ... -
jogl入门
2011-12-31 13:19 50661、jogl是什么? jogl是Java OpenGL的 ... -
grails学习之自定义标签
2011-12-30 17:22 57391、在grails项目结构中有一个taglib文件夹(项目名/ ... -
加密机制的发展(JCE/JCA)
2011-12-23 17:56 4731一、对称密钥-------最原始的加密解密 对称 ... -
开发一个JCE的Provider
2011-12-23 13:42 44391、开发环境ubuntu+eclipse+openJDK ... -
enum还有人记得吗?
2011-12-21 15:42 1075enum其实挺好用的,特别是对于一些固定的东西! packa ... -
JNA入门1
2011-12-06 22:15 36351、jna是什么 jna是java native acces ... -
利用BC替换X509证书的公钥
2011-11-23 09:54 2155public static X509Certificate r ... -
利用BC的X509v3CertificateBuilder组装X509证书
2011-11-22 17:38 3785// 设置开始日期和结束日期 long year = 3 ... -
grails框架中webService插件的使用(axis2,cxf)
2011-09-17 22:40 3176一、cxf插件的使用: 1、运行命令: grails in ... -
Java直接发送邮件或写好的eml邮件
2011-08-03 13:50 1462import java.io.File; import ... -
利用bouncycastle组装X509证书
2011-08-02 19:02 9295CreateCert.java package com.se ... -
Java中对称密钥、非对称密钥和数字签名的用法
2011-04-16 12:21 31611、非对称密钥: package com.mysec; ... -
eclipse3.6 太阳神版 中文汉化插件
2011-04-09 20:00 1089经常用eclipse,但用多了英文版,突然间想找个新鲜感,于是 ... -
Java中的按位取反运算符,哪位能详解一下?
2011-03-14 23:29 2190最近面试遇到了这样一道题: System.out.print ... -
Java常见排序算法
2011-02-24 17:53 829package test; import java ... -
常见模式例子
2011-02-24 17:37 972工厂模式 package login.sj; ... -
关于Java中各种修饰符与访问修饰符的说明
2011-02-24 15:05 984类: 访问修饰符 修饰符 class 类名称 exte ...
相关推荐
jogl简介,jogl入门例子,jogl简介,jogl入门例子
jogl简单入门例子,15个例子,已经包含了JOGL1.0,2.0的jar包
这个是我刚刚学JOGL的时候找到的一份资料,很适合JOGL的初学者,内容是E文的,但都是通俗易懂的,只要一点点英语基础就可以理解,现在JOGL的资料很少,希望对想学而又找不到资料的朋友有点帮助
jogl常用jar包和dll库 博文链接:https://ligson.iteye.com/blog/1331528
NULL 博文链接:https://wjyjimy.iteye.com/blog/692991
NULL 博文链接:https://wjyjimy.iteye.com/blog/659837
NULL 博文链接:https://wjyjimy.iteye.com/blog/662254
JOGL2.0之MYeclipse配置.docJOGL2.0之MYeclipse配置.docJOGL2.0之MYeclipse配置.docJOGL2.0之MYeclipse配置.docJOGL2.0之MYeclipse配置.doc
nehe 的 Jogl教程源码,学习Jogl很好的参考材料
64bit的jogl包,里面包含jogl.jar,gluegen-rt.jar,已经四个解压dll文件
JOGL source code and project information can be found at: https://jogl.dev.java.net/ Numerous answers to common questions can be found on the JOGL forum: http://www.javagaming.org/index.php/board,...
英文版的jogl 4合1教程,很不错个人觉得jogl 比j3d要好
jogl的官方api,英文版的,你可以从里面了解到jogl的详细api信息
网上找到的关于JOGL的PDF格式的资料
Nehe三维教程Jogl版
想做自己的3d游戏么 想知道用java怎么实现opengl那样炫的效果么物超所值导入myeclipse工程直接可以使用.还等神马骚年.下载吧 注意有个别类没修改完不过这可是俺修改的最新jogl教程
JOGL2版本在Eclipse里面配置的图文教程,通俗易懂
整理好的关于搭建jogl开发环境需要的相关jar包、动态链接库(包括32为系统和64位系统的)以及相关的src和开发文档。
jogl-2.0-windows-i586