libGDX游戏开发之运动轨迹绘制(十一)

libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm…国内用libgdx比较少,多数情况需要去官网和google找资料,相互学习的可以加我联系方式。

按轨迹移动的绘制需要用到数学函数,通过不断变动x,y坐标达到效果

1、圆形轨迹移动

经典:按圆形轨迹移动,回顾一下正弦和余弦:

当给定固定左边时是这样的:

我们看到A点的坐标可以根据 θ 角度正弦余弦求出,渲染中通过变化 θ 达到圆形运动,实现代码如下:

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; /**
* @author lingkang
*/
public class RunTest extends ApplicationAdapter {
private Texture texture;
private SpriteBatch batch;
private float R = 100; // 半径
private float originX = 200, originY = 200; // 原点
private float Pi = 3.1416f; // π 这里我们不用双精度,3.1416够了 PI = 3.14159265358979323846 ....
private float angle = 1f; // 旋转的角度 @Override
public void create() {
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("plane/player1.png"));
} @Override
public void render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // 清除屏幕 //正弦函数 sinθ=y/r 角度 π不需要太过精确
float a = 2 * Pi / 360 * angle;
float x = originX + (float) Math.sin(a) * R;
float y = originY + (float) Math.cos(a) * R;
// 角度增加
if (++angle > 360f) {
angle = 1f;
} // 绘制
batch.begin();
batch.draw(texture, x, y);
batch.end();
}
}

效果如下:

不清除屏幕效果如下:

2、按正弦轨迹移动

正弦函数如下:

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch; /**
* @author lingkang
*/
public class RunTest02 extends ApplicationAdapter {
private Texture texture;
private SpriteBatch batch;
private float originX = 0, originY = 200; // 原点
private float Pi = 3.1416f; // π 这里我们不用双精度,3.1416够了 PI = 3.14159265358979323846 ....
private float angle = 0f; // 旋转的角度
private float r = 100; @Override
public void create() {
batch = new SpriteBatch();
texture = new Texture(Gdx.files.internal("plane/player1.png"));
} @Override
public void render() {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); // 清除屏幕
if (++originX > 648) { // 坐标移动
originX = 0;
}
float a = 2 * Pi / 360 * angle;
float y = originY + (float) Math.sin(a) * r; // r 为顶峰幅度值
// 角度增加
if (++angle > 360f) {
angle = 0f;
}
// 绘制
batch.begin();
batch.draw(texture, originX, y);
batch.end();
}
}

效果如下:

不清除屏幕效果:

libGDX游戏开发之按轨迹移动(十一)的更多相关文章

  1. Libgdx游戏开发(2)——接水滴游戏实现

    原文:Libgdx游戏开发(2)--接水滴游戏实现 - Stars-One的杂货小窝 本文使用Kotlin语言开发 通过本文的学习可以初步了解以下基础知识的使用: Basic file access ...

  2. [libGDX游戏开发教程]使用libGDX进行游戏开发(12)-Action动画

    前文章节列表:  使用libGDX进行游戏开发(11)-高级编程技巧   使用libGDX进行游戏开发(10)-音乐音效不求人,程序员也可以DIY   使用libGDX进行游戏开发(9)-场景过渡   ...

  3. [libGDX游戏开发教程]使用libGDX进行游戏开发(1)-游戏设计

    声明:<使用Libgdx进行游戏开发>是一个系列,文章的原文是<Learning Libgdx Game Development>,大家请周知.后续的文章连接在这里 使用Lib ...

  4. 精通libGDX游戏开发-RPG实战-开发游戏的基本前提

    说起RPG,大概国人是不会陌生的. 这不得不从中国单机游戏市场说起,由于早期软件市场被盗版杀死,顺带的,单机游戏软件作为软件市场的分支,也没赚什么钱,养不活公司纷纷倒闭,只到RPG游戏<仙剑奇侠 ...

  5. [libgdx游戏开发教程]使用Libgdx进行游戏开发(11)-高级编程技巧 Box2d和Shader

    高级编程技巧只是相对的,其实主要是讲物理模拟和着色器程序的使用. 本章主要讲解利用Box2D并用它来实现萝卜雨,然后是使用单色着色器shader让画面呈现单色状态:http://files.cnblo ...

  6. [libgdx游戏开发教程]使用Libgdx进行游戏开发(10)-音乐和音效

    本章音效文件都来自于公共许可: http://files.cnblogs.com/mignet/sounds.zip 在游戏中,播放背景音乐和音效是基本的功能. Libgdx提供了跨平台的声音播放功能 ...

  7. [libgdx游戏开发教程]使用Libgdx进行游戏开发(2)-游戏框架搭建

    让我们抛开理论开始code吧. 入口类CanyonBunnyMain的代码: package com.packtpub.libgdx.canyonbunny; import com.badlogic. ...

  8. 精通libGDX游戏开发-RPG实战-欢迎来到RPG的世界

    欢迎来到RPG的世界 本章我会快速的使用tiled这样的瓷砖地图工具,来带领大家创造所设想的世界. 创建并编辑瓷砖地图 瓷砖地图(tile-based map)是广泛应用于各种游戏类型的地图格式,li ...

  9. [libgdx游戏开发教程]使用Libgdx进行游戏开发(9)-场景过渡

    本章主要讲解场景过渡效果的使用.这里将用到Render to Texture(RTT)技术. Libgdx提供了一个类,实现了各种常见的插值算法,不仅适合过渡效果,也适合任意特定行为. 在本游戏里面, ...

  10. [libgdx游戏开发教程]使用Libgdx进行游戏开发(7)-屏幕布局的最佳实践

    管理多个屏幕 我们的菜单屏有2个按钮,一个play一个option.option里就是一些开关的设置,比如音乐音效等.这些设置将会保存到Preferences中. 多屏幕切换是游戏的基本机制,Libg ...

随机推荐

  1. How to install Django¶

    This document will get you up and running with Django. Install Python Being a Python Web framework, ...

  2. RocketMQ为什么要保证订阅关系一致

    这篇文章,笔者想聊聊 RocketMQ 最佳实践之一:保证订阅关系一致. 订阅关系一致指的是同一个消费者 Group ID 下所有 Consumer 实例所订阅的 Topic .Tag 必须完全一致. ...

  3. 基于LangChain的LLM应用开发3——记忆

    此情可待成追忆,只是当时已惘然.我们人类会有很多或美好或痛苦的回忆,有的回忆会渐渐模糊,有的回忆午夜梦醒,会浮上心头. 然而现在的大语言模型都是没有记忆的,都是无状态的,大语言模型自身不会记住和你对话 ...

  4. js数据结构--队列

    <!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...

  5. 服务器常见问题排查(一)——cpu占用高、上下文频繁切换、频繁GC

    一般而言cpu异常往往还是比较好定位的.原因包括业务逻辑问题(死循环).频繁gc以及上下文切换过多.而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况. 使用js ...

  6. Unity - UIWidgets 1. 从Hello world开始

    安装参照github的README.UIWidgets相当于Flutter的一个Unity实现(后面表示UIWidgets和UGUI区别时直接称"Flutter"),是把承载的所有 ...

  7. js前端操作,c#后端下发xml文件

    前端: var xmlLanguageDoc; $.ajax({         url: "/GiveMeXML",//此处可随意定义,不一定是路径.在c# ,请求被捕获后,由c ...

  8. 微信小程序:音乐播放器

    音乐资源使用的是QQ音乐资源.图片资源使用的网易云音乐的专辑图片. HTML: <view class="container"> <div wx:for=&quo ...

  9. [Python]对称日!

    def check(year): if (year%4 == 0 and year%100 != 0) or year%400 == 0: return True else: return False ...

  10. .NET周刊【11月第2期 2023-11-12】

    国内文章 一个基于百度飞桨封装的.NET版本OCR工具类库 - PaddleOCRSharp https://www.cnblogs.com/Can-daydayup/p/17818557.html ...