当前位置: 首页 > wzjs >正文

龙岗建设企业网站wordpress要评论了才能看到内容

龙岗建设企业网站,wordpress要评论了才能看到内容,微网站如何建立,公司要做网站业务逻辑:初始化小球随机自有移动,遇到屏幕边缘反弹,摇杆介入后小球停止自有移动,按照摇杆控制方向移动。 https://download.csdn.net/download/AnalogElectronic/90453667 https://download.csdn.net/download/AnalogElectronic…

业务逻辑:初始化小球随机自有移动,遇到屏幕边缘反弹,摇杆介入后小球停止自有移动,按照摇杆控制方向移动。

https://download.csdn.net/download/AnalogElectronic/90453667
https://download.csdn.net/download/AnalogElectronic/90453667

实现效果
在这里插入图片描述

核心代码

package com.example.snakegame2import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.math.cos
import kotlin.math.sin
import kotlin.random.Randomclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {BallControlScreen()}}@SuppressLint("CoroutineCreationDuringComposition")@Composablefun BallControlScreen() {var ballX by remember { mutableStateOf(200f) }var ballY by remember { mutableStateOf(300f) }var dx by remember { mutableStateOf(0f) }var dy by remember { mutableStateOf(0f) }var canvasWidth by remember { mutableStateOf(400f) }var canvasHeight by remember { mutableStateOf(400f) }// 初始化随机方向val angle = Random.nextFloat() * 360fdx = cos(Math.toRadians(angle.toDouble())).toFloat()dy = sin(Math.toRadians(angle.toDouble())).toFloat()Column(horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.Center,modifier = Modifier.fillMaxSize()) {// 小球绘制区域Canvas(modifier = Modifier.size(400.dp).padding(20.dp).onSizeChanged { size ->canvasWidth = size.width.toFloat()canvasHeight = size.height.toFloat()},onDraw = {// 绘制蓝色边界线drawRect(color = Color.Blue,topLeft = Offset(0f, 0f),size = Size(size.width, size.height),style = Stroke(width = 2f))// 绘制小球,背景为白色drawCircle(color = Color.Red,radius = 20f,center = Offset(ballX, ballY))})// 虚拟摇杆Joystick(modifier = Modifier.size(100.dp),onJoystickMoved = { x, y ->// 归一化摇杆输入,确保dx和dy的范围在[-1, 1]dx = xdy = y})// 根据摇杆移动更新小球位置GlobalScope.launch(Dispatchers.Main) {while (true) {// 摇杆控制方向,但不改变速度ballX += dx * 10ballY += dy * 10// 碰撞检测if (ballX < 20) {ballX = 20fdx = -dx} else if (ballX > canvasWidth - 20) {ballX = canvasWidth - 20dx = -dx}if (ballY < 20) {ballY = 20fdy = -dy} else if (ballY > canvasHeight - 20) {ballY = canvasHeight - 20dy = -dy}delay(16)}}}}@Composablefun Joystick(modifier: Modifier = Modifier,onJoystickMoved: (Float, Float) -> Unit = { _, _ -> }) {var offsetX by remember { mutableStateOf(0f) }var offsetY by remember { mutableStateOf(0f) }Box(modifier = modifier.pointerInput("Joystick") {detectDragGestures(onDragStart = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)},onDrag = { change, dragAmount ->val size = sizeval center = Offset((size.width / 2).toFloat(), (size.height / 2).toFloat())val position = change.position - centerval distance = position.getDistance()val maxDistance = size.width / 2if (distance > maxDistance) {val normalizedPosition = if (distance > maxDistance) {val ratio = maxDistance / distanceOffset(position.x * ratio, position.y * ratio)} else {position}offsetX = normalizedPosition.x / maxDistanceoffsetY = normalizedPosition.y / maxDistance} else {offsetX = position.x / maxDistanceoffsetY = position.y / maxDistance}onJoystickMoved(offsetX, offsetY)},onDragEnd = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)})}) {// 摇杆背景Canvas(modifier = Modifier.fillMaxSize()) {drawCircle(color = Color.Gray,radius = size.width / 2)}// 摇杆帽子Canvas(modifier = Modifier.size(60.dp).align(Alignment.Center),onDraw = {drawCircle(color = Color.Blue,radius = size.width / 2,center = Offset(size.width / 2 + (offsetX * (size.width / 2 - 10)),size.height / 2 + (offsetY * (size.height / 2 - 10))))})}}
}

当然!以下是对代码的详细解释,包括导入的包和每一行代码的作用:

导入的包

import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlin.math.cos
import kotlin.math.sin
import kotlin.random.Random
  • android.annotation.SuppressLint:用于抑制特定的编译器警告。
  • android.os.Bundle:用于传递活动之间的数据。
  • androidx.activity.ComponentActivity:Android 的活动基类,用于创建活动。
  • androidx.activity.compose.setContent:用于设置活动的内容为 Jetpack Compose UI。
  • androidx.compose.foundation.Canvas:用于绘制自定义图形。
  • androidx.compose.foundation.gestures.detectDragGestures:用于检测拖拽手势。
  • androidx.compose.foundation.layout.Arrangement:用于布局子组件的排列方式。
  • androidx.compose.foundation.layout.Box:用于创建一个容器,可以包含多个子组件。
  • androidx.compose.foundation.layout.Column:用于创建垂直排列的布局。
  • androidx.compose.foundation.layout.fillMaxSize:用于使组件填充父容器。
  • androidx.compose.foundation.layout.padding:用于为组件添加内边距。
  • androidx.compose.foundation.layout.size:用于设置组件的大小。
  • androidx.compose.runtime.Composable:用于标记一个可组合函数。
  • androidx.compose.runtime.getValue:用于从 mutableStateOf 获取值。
  • androidx.compose.runtime.mutableStateOf:用于创建一个可变状态。
  • androidx.compose.runtime.remember:用于在组合中记住一个值。
  • androidx.compose.runtime.setValue:用于设置 mutableStateOf 的值。
  • androidx.compose.ui.Alignment:用于对齐组件。
  • androidx.compose.ui.Modifier:用于修改组件的属性。
  • androidx.compose.ui.geometry.Offset:用于表示一个二维坐标。
  • androidx.compose.ui.geometry.Size:用于表示一个大小。
  • androidx.compose.ui.graphics.Color:用于表示颜色。
  • androidx.compose.ui.graphics.drawscope.Stroke:用于绘制边框。
  • androidx.compose.ui.input.pointer.pointerInput:用于处理指针输入。
  • androidx.compose.ui.layout.onSizeChanged:用于在组件大小改变时触发回调。
  • androidx.compose.ui.unit.dp:用于表示密度无关的像素。
  • kotlinx.coroutines.Dispatchers:用于处理协程的调度。
  • kotlinx.coroutines.GlobalScope:用于创建全局协程。
  • kotlinx.coroutines.Job:用于表示协程的作业。
  • kotlinx.coroutines.delay:用于在协程中延迟执行。
  • kotlinx.coroutines.launch:用于启动协程。
  • kotlin.math.cos:用于计算余弦值。
  • kotlin.math.sin:用于计算正弦值。
  • kotlin.random.Random:用于生成随机数。

主活动类

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {BallControlScreen()}}
}
  • MainActivity:主活动类,继承自 ComponentActivity
  • onCreate:活动的生命周期方法,用于初始化活动。
  • setContent:设置活动的内容为 Jetpack Compose UI,调用 BallControlScreen 函数。

小球控制屏幕

@SuppressLint("CoroutineCreationDuringComposition")
@Composable
fun BallControlScreen() {var ballX by remember { mutableStateOf(200f) }var ballY by remember { mutableStateOf(300f) }var dx by remember { mutableStateOf(0f) }var dy by remember { mutableStateOf(0f) }var canvasWidth by remember { mutableStateOf(400f) }var canvasHeight by remember { mutableStateOf(400f) }// 初始化随机方向val angle = Random.nextFloat() * 360fdx = cos(Math.toRadians(angle.toDouble())).toFloat()dy = sin(Math.toRadians(angle.toDouble())).toFloat()Column(horizontalAlignment = Alignment.CenterHorizontally,verticalArrangement = Arrangement.Center,modifier = Modifier.fillMaxSize()) {// 小球绘制区域Canvas(modifier = Modifier.size(400.dp).padding(20.dp).onSizeChanged { size ->canvasWidth = size.width.toFloat()canvasHeight = size.height.toFloat()},onDraw = {// 绘制蓝色边界线drawRect(color = Color.Blue,topLeft = Offset(0f, 0f),size = Size(size.width, size.height),style = Stroke(width = 2f))// 绘制小球,背景为白色drawCircle(color = Color.Red,radius = 20f,center = Offset(ballX, ballY))})// 虚拟摇杆Joystick(modifier = Modifier.size(100.dp),onJoystickMoved = { x, y ->// 归一化摇杆输入,确保dx和dy的范围在[-1, 1]dx = xdy = y})// 根据摇杆移动更新小球位置GlobalScope.launch(Dispatchers.Main) {while (true) {// 摇杆控制方向,但不改变速度ballX += dx * 10ballY += dy * 10// 碰撞检测if (ballX < 20) {ballX = 20fdx = -dx} else if (ballX > canvasWidth - 20) {ballX = canvasWidth - 20dx = -dx}if (ballY < 20) {ballY = 20fdy = -dy} else if (ballY > canvasHeight - 20) {ballY = canvasHeight - 20dy = -dy}delay(16)}}}
}
  • @SuppressLint("CoroutineCreationDuringComposition"):抑制特定的编译器警告。
  • @Composable:标记一个可组合函数。
  • BallControlScreen:小球控制屏幕的可组合函数。
  • var ballX by remember { mutableStateOf(200f) }:初始化小球的 X 坐标。
  • var ballY by remember { mutableStateOf(300f) }:初始化小球的 Y 坐标。
  • var dx by remember { mutableStateOf(0f) }:初始化小球的水平速度。
  • var dy by remember { mutableStateOf(0f) }:初始化小球的垂直速度。
  • var canvasWidth by remember { mutableStateOf(400f) }:初始化画布的宽度。
  • var canvasHeight by remember { mutableStateOf(400f) }:初始化画布的高度。
  • val angle = Random.nextFloat() * 360f:生成一个随机角度。
  • dx = cos(Math.toRadians(angle.toDouble())).toFloat():将角度转换为水平速度。
  • dy = sin(Math.toRadians(angle.toDouble())).toFloat():将角度转换为垂直速度。
  • Column:创建一个垂直排列的布局。
  • horizontalAlignment = Alignment.CenterHorizontally:水平居中对齐。
  • verticalArrangement = Arrangement.Center:垂直居中排列。
  • modifier = Modifier.fillMaxSize():使组件填充父容器。
  • Canvas:绘制小球和边界线的画布。
  • modifier = Modifier.size(400.dp).padding(20.dp):设置画布的大小和内边距。
  • onSizeChanged:在画布大小改变时更新 canvasWidthcanvasHeight
  • onDraw:绘制蓝色边界线和小球。
  • drawRect:绘制蓝色边界线。
  • drawCircle:绘制小球。
  • Joystick:虚拟摇杆的可组合函数。
  • modifier = Modifier.size(100.dp):设置摇杆的大小。
  • onJoystickMoved:处理摇杆的移动事件。
  • GlobalScope.launch(Dispatchers.Main):启动一个协程,用于更新小球的位置。
  • while (true):无限循环,持续更新小球的位置。
  • ballX += dx * 10:根据摇杆的输入更新小球的 X 坐标。
  • ballY += dy * 10:根据摇杆的输入更新小球的 Y 坐标。
  • if (ballX < 20):检测小球是否碰到左边界。
  • if (ballX > canvasWidth - 20):检测小球是否碰到右边界。
  • if (ballY < 20):检测小球是否碰到上边界。
  • if (ballY > canvasHeight - 20):检测小球是否碰到下边界。
  • delay(16):延迟 16 毫秒,使小球的移动更加平滑。

虚拟摇杆

@Composable
fun Joystick(modifier: Modifier = Modifier,onJoystickMoved: (Float, Float) -> Unit = { _, _ -> }
) {var offsetX by remember { mutableStateOf(0f) }var offsetY by remember { mutableStateOf(0f) }Box(modifier = modifier.pointerInput("Joystick") {detectDragGestures(onDragStart = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)},onDrag = { change, dragAmount ->val size = sizeval center = Offset((size.width / 2).toFloat(), (size.height / 2).toFloat())val position = change.position - centerval distance = position.getDistance()val maxDistance = size.width / 2if (distance > maxDistance) {val normalizedPosition = if (distance > maxDistance) {val ratio = maxDistance / distanceOffset(position.x * ratio, position.y * ratio)} else {position}offsetX = normalizedPosition.x / maxDistanceoffsetY = normalizedPosition.y / maxDistance} else {offsetX = position.x / maxDistanceoffsetY = position.y / maxDistance}onJoystickMoved(offsetX, offsetY)},onDragEnd = {offsetX = 0foffsetY = 0fonJoystickMoved(0f, 0f)})}) {// 摇杆背景Canvas(modifier = Modifier.fillMaxSize()) {drawCircle(color = Color.Gray,radius = size.width / 2)}// 摇杆帽子Canvas(modifier = Modifier.size(60.dp).align(Alignment.Center),onDraw = {drawCircle(color = Color.Blue,radius = size.width / 2,center = Offset(size.width / 2 + (offsetX * (size.width / 2 - 10)),size.height / 2 + (offsetY * (size.height / 2 - 10))))})}
}
  • @Composable:标记一个可组合函数。
  • Joystick:虚拟摇杆的可组合函数。
  • modifier: Modifier = Modifier:设置摇杆的修饰符。
  • onJoystickMoved: (Float, Float) -> Unit = { _, _ -> }:处理摇杆的移动事件。
  • var offsetX by remember { mutableStateOf(0f) }:初始化摇杆的水平偏移量。
  • var offsetY by remember { mutableStateOf(0f) }:初始化摇杆的垂直偏移量。
  • Box:创建一个容器,包含摇杆的背景和帽子。
  • modifier = modifier.pointerInput("Joystick"):处理摇杆的指针输入。
  • detectDragGestures:检测拖拽手势。
  • onDragStart:在拖拽开始时重置偏移量。
  • onDrag:在拖拽过程中更新偏移量。
  • onDragEnd:在拖拽结束时重置偏移量。
  • Canvas:绘制摇杆的背景。
  • drawCircle:绘制灰色的摇杆背景。
  • Canvas:绘制摇杆的帽子。
  • drawCircle:绘制蓝色的摇杆帽子。

希望这个详细解释能帮助你更好地理解代码!如果有任何问题或需要进一步优化,请随时告诉我。

http://www.dtcms.com/wzjs/828245.html

相关文章:

  • 邢台润联科技有限公司产品做优化好还是超级网站好
  • 阿里云用ip做网站wordpress文章显示宽度
  • 公司做企业网站广州做包包的网站
  • 网站备案可以更改吗wordpress网页文件太多
  • ftp免费网站空间哈尔滨百度引擎
  • 网站开发的合同范本制作手机主题的app
  • seo建设网站如何建设自己企业网站
  • 网站首页尺寸做视频直播网站
  • 前端做网站是什么流程seo自动推广工具
  • 更改wordpress最大文件seo新站如何快速排名
  • 宣武深圳网站建设公司织梦学校网站源码
  • 如果评价网站做的好不好查看网站是什么语言做的
  • 国外免费logo网站河北省邢台市建设工程网站
  • 免费的ppt成品网站大全摄影网站开题报告
  • 给百度做网站的公司网页qq登录入口官网官方
  • 优化网站的软件下载无网站无产品链接如何做SOHO
  • 网站开发简直云指网站开发
  • 建英语网站好做网站一直不知道做什么网站
  • 创意网站 模板国外做鞋子的网站吗
  • 智库建设网站新公司网站设计注意事项
  • 单位网站建设制作wordpress 获取当前文章栏目链接
  • 中国建设网站官方网站莱州网络推广公司
  • 网站建设的主要特征河西做网站的公司
  • 北京企业做网站费用扬中零壹网站建设
  • php网站建设素材网站开发商外包
  • 淄博桓台学校网站建设方案如何搭建一个购物网站
  • 个人网站主页模板网站标题的设置方法
  • 湖南省百川电力建设有限公司网站一站式服务宣传语
  • 网站备案 地址一达通外贸综合服务平台
  • 想建立什么网站吗地方网 wordpress