IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 第三阶段总结 -> 正文阅读

[游戏开发]第三阶段总结

1.动画

  1. transform: translate平移(100px) rotate旋转(45deg) 缩放scale(0.5) skew倾斜(30deg)

  2. 原点transform-origin: center center;(默认为元素左上角)

  3. transition过渡动画

    ? ?播放过度动画至少包含 transition-property transition-duration

    ? ?指定css属性能够产生过度动画?

    ? ? ? ? ? ? transition-property: left, transform;

    ? ? ? ? ? ? ?transition-property 还有两个待选项

    ? ? ? ? ? ? ? ? ? ? ? ? ?none: 无

    ? ? ? ? ? ? ? ? ? ? ? ? ?all: 所有属性都能播放过渡动画

    ? ? ?动画播放的时长

    ? ? ? ? ? ?transition-duration: 2s;

    ? ? ??动画播放的速度曲线

    ? ? ? ? ? ? ? ? linear: 匀速直线运动

    ? ? ? ? ? ? ? ? ease-in: 慢进

    ? ? ? ? ? ? ? ? ease-out: 慢出

    ? ? ? ? ? ? ? ? ease-in-out: 慢进慢出

    ? ? ? ? ? ? ? ? cubic-bezier: 曲线函数

    ? ??动画播放延迟

    ? ? ? ? ? ? transition-delay: 3s;

    ? ? ?合成属性

    ? ? ? ? ?语法: transition: property duration timing-function delay;

    案例:钟表综合应用

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div.box {
                width: 500px;
                height: 500px;
                background-color: black;
                border: 15px solid rgb(128, 128, 128);
                border-radius: 50%;
                position: relative;
                background-image: url(../img/钟表背景图片.jpeg);
                background-position: -43px -139px;
            }
    
            .mini {
                width: 20px;
                height: 20px;
                background-color: white;
                border-radius: 20px;
                position: absolute;
                top: 5px;
                left: 240px;
                transform-origin: center 245px;
            }
    
    
            .h {
                width: 10px;
                height: 180px;
                background-color: black;
                position: absolute;
                top: 150px;
                left: 268px;
                transform: rotate(210deg);
                transform-origin: center 120px;
            }
    
            .m {
                width: 10px;
                height: 200px;
                background-color: chartreuse;
                position: absolute;
                top: 130px;
                left: 268px;
                transform: rotate(236deg);
                transform-origin: center 140px;
            }
    
            .s {
                width: 10px;
                height: 220px;
                background-color: #FCA896;
                position: absolute;
                top: 110px;
                left: 267px;
                transform: rotate(90deg);
                transform-origin: center 160px;
            }
    
            .point {
                width: 50px;
                height: 50px;
                background-color: #FCA896;
                border-radius: 30px;
                position: absolute;
                top: 248px;
                left: 250px;
                /* display: none; */
            }
    
            .h-3 {
                width: 0;
                height: 0;
                border-width: 20px;
                border-style: solid;
                border-color: transparent transparent black transparent;
                position: absolute;
                top: -41px;
                left: -15px;
            }
    
            .m-3 {
                width: 0;
                height: 0;
                border-width: 20px;
                border-style: solid;
                border-color: transparent transparent chartreuse transparent;
                position: absolute;
                top: -41px;
                left: -15px;
            }
    
            .s-3 {
                width: 0;
                height: 0;
                border-width: 20px;
                border-style: solid;
                border-color: transparent transparent #FCA896 transparent;
                position: absolute;
                top: -41px;
                left: -15px;
    
            }
        </style>
    </head>
    
    <body>
        <div class="box"></div>
    
        <div class="h">
            <div class="h-3"></div>
        </div>
        <div class="m">
            <div class="m-3"></div>
        </div>
        <div class="s">
            <div class="s-3"></div>
        </div>
        <div class="point"></div>
        <script>
            let box = document.querySelector('.box')
            let deg = -6
    
            for (let i = 0; i < 60; i++) {
                let div = document.createElement('div')
                div.className = 'mini'
                deg += 6
                div.style.transform = `rotate(${deg}deg)`
                box.appendChild(div)
                if (i % 5 == 0) {
                    div.style.height = '40px'
                }
            }
            let hour = document.querySelector('.h')
            let minute = document.querySelector('.m')
            let second = document.querySelector('.s')
            let a = new Date()
            let h = a.getHours();
            let m = a.getMinutes()
            let s = a.getSeconds()
            console.log(a);
            console.log(h, m, s);
            //圈数
            let hround = 0
            let mround = 0
            let sround = 0
            function clock() {
                hour.style.transform = `rotate(${hround * 360 + h * 30}deg)`
                minute.style.transform = `rotate(${mround * 360 + m * 6}deg)`
                second.style.transform = `rotate(${sround * 360 + s * 6}deg)`
            }
            clock();
            setInterval(() => {
                s++
                if (s >= 60) {
                    m++
                    sround++
                    s = 0
                }
                if (m >= 60) {
    
                    h++
                    mround++
                    m = 0
                }
                if (h >= 12) {
                    h = 0
                    hround++
                }
                clock()
            }, 1000)
        </script>
    </body>
    
    </html>
    钟表
    效果图?

?2.3D变换

?3d变换 是让我们的元素看上去在三维空间中发生变换(平移 旋转 缩放 倾斜)

参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/transform-style

? ? 总结:

? ? 要使用3d变换需要依序执行以下步骤:

? ? 1. 搭建3d场景,在父元素上设置:transform-style: preserve-3d;

? ? 2. 在父元素上设置透视距离:perspective: 100px;

? ? 3. 给场景添加演员,给场景元素添加子元素

? ? 4. 在子元素上使用3d变换

例如:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            margin: 0;
        }

        .scene {
            height: 100vh;
            transform-style: preserve-3d;
            perspective: 300px;
            perspective-origin: center center;

            display: flex;
            justify-content: center;
            align-items: center;
        }

        .face {
            width: 200px;
            height: 200px;
            background-color: #f00;
            opacity: 0.2;

            position: absolute;

            color: #fff;
            font-size: 32px;

            display: flex;
            justify-content: center;
            align-items: center;
        }

        .left {
            transform-origin: left center;
            transform: rotateY(90deg);
            background-color: #ff0;
        }

        .right {
            transform-origin: right center;
            transform: rotateY(-90deg);
            background-color: #0f0;
        }

        .top {
            transform-origin: center top;
            transform: rotateX(-90deg);
            background-color: #00f;
        }

        .bottom {
            transform-origin: center bottom;
            transform: rotateX(90deg);
            background-color: #0ff;
        }

        .back {
            transform: translateZ(-200px);
            background-color: #f0f;
        }
    </style>
</head>

<body>
    <div class="scene">
        <div class="face">前</div>
        <div class="face back">后</div>
        <div class="face left">左</div>
        <div class="face right">右</div>
        <div class="face top">上</div>
        <div class="face bottom">下</div>
    </div>
</body>

</html>

效果图:

?属性选择器补充:

?伪类选择器补充:

?渐变色

参考:https://developer.mozilla.org/zh-CN/docs/Web/CSS/gradient

?线性渐变

? ? ? ? ? ? 语法: linear-gradient(direction, color1, color2, color3 ... )

? ? ? ? ? ? ? ? direction: 渐变色的朝向 以 to 开头, 或者可以添加角度值; 默认值为 to top

? ? ? ? ? ? ? ? color1 color2 ...: 渐变的颜色序列

线性渐变

? background-image: linear-gradient(30deg, #f00, #0f0, #00f);

效果图:

? /* 颜色值后可以添加像素距离,该像素值代表着该颜色所处的位置,该位置颜色将到下一个位置的颜色之间进行渐变 */

? ? ? ? ? ? background-image: linear-gradient(to right, #f00, #f00 50px, #0f0 50px, #0f0 100px, #00f 200px);

效果图:

?

?/* 重复线性渐变 */

? ? ? ? ? ? background-image: repeating-linear-gradient(to right, #f00, #f00 50px, #00f 50px, #00f 100px);

效果图:

?

?/* 径向渐变 */

? ? ? ? ? ? background-image: radial-gradient(#f00, orange, #0f0, #ff0, #f0f);

? ? ? ? ? ? background-image: radial-gradient(#f00, #f00 50px, #00f 50px, #00f 100px, #0f0 100px, #0f0 200px);

效果图:

?

/* 重复径向渐变 */

? ? ? ? ? ? background-image: repeating-radial-gradient(#f00, #f00 50px, #ff0 50px, #ff0 100px);

效果图:

?

?分栏布局

?

响应式布局

当屏幕大小为600-900px时,背景颜色改为橙色

?@media screen and (min-width: 600px) and (max-width: 900px) {

? ? ? ? ? ? .box {

? ? ? ? ? ? ? ? background-color: orange?

? ? ? ? ? ? }

? ? ? ? }

canvas

?使用canvas的步骤

? ? 1. 创建canvas标签

? ? 2. 给canvas标签设置 width height 属性

? ? ? ? ? ?<canvas width="400" height="300"></canvas>

? ? 3. 通过js 获取canvas标签

? ? ? ? ? ? const canvas = document.querySelector('canvas')

? ? 4. 通过canvas标签获取context画布上下文(画布对象)

? ? ? ? ? ?const ctx = canvas.getContext('2d')

? ? 5. 通过context绘制画布

?? ? ? ? ? ? ?例如:?绘制一个实心矩形

? ? ? ? ? ? ? ??ctx.fillRect(100, 50, 100, 100)

? ? ? ? ? ? ? ? ctx.fillRect(x, y, w, h)

? ? ? ? ? ? ? ? ? ? ? ? ? ?x: 水平坐标

? ? ? ? ? ? ? ? ? ? ? ? ? ? y: 竖直坐标

? ? ? ? ? ? ? ? ? ? ? ? ? ? 坐标原点在canvas左上角

? ? ? ? ? ? ? ? ? ? ? ? ? ? w: 宽度

? ? ? ? ? ? ? ? ? ? ? ? ? ?? h: 高度

? ? // 清空矩形, 用于清空画布

? ? ctx.clearRect(0, 0, 800, 600)

? ? ?绘制实心文字

? ? ?语法:ctx.fillText(text, x, y, max-width)

? ? ?text: 要渲染的文本

? ? ??x,y: 文本渲染的坐标位置

? ? ? max-width: 文本最大宽度,当大于该宽度,文本字体将自动缩小以自适应宽度

? ? ??ctx.fillText('祖国万岁!!', 200, 100, 100)

划线:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        canvas {
            border: 3px solid #000;
        }
    </style>
</head>

<body>
    <canvas width="800" height="600"></canvas>
</body>

<script>
    const canvas = document.querySelector('canvas')
    const ctx = canvas.getContext('2d')


    // 设置颜色和线宽
    ctx.strokeStyle = '#ff0'
    ctx.lineWidth = 15

    // 画线分两个步骤:
    // 1. 描点(设置路径)
    // 2. 画线(将所描的点连接起来)

    // 步骤一
    // 使用 beginPath 开启路径
    ctx.beginPath()
    // 移动笔头但不会记录路径上的线条
    ctx.moveTo(400, 100)
    // 用线绘制到下一个点
    ctx.lineTo(200, 200)
    ctx.lineTo(600, 200)
    ctx.lineTo(400, 100)

    // 将路径封闭
    ctx.closePath()

    // 注意:beginPath在画新的路径的时候必须调用,closePath选择性调用


    // 步骤二
    // 为了显示图形需要调用以下函数
    // 将路径所包围的图形用纯色来填充
    // ctx.fill()
    // 将路径用镂空线条进行绘制
    ctx.stroke()


    ctx.strokeStyle = '#f00'

    ctx.beginPath()

    ctx.moveTo(400, 400)
    ctx.lineTo(500, 400)

    // 角度转弧度的公式: rad = (PI / 180) * deg
    // 弧线
    // ctx.arc(x, y, r, start, end)
    // x: 圆心横坐标
    // y: 圆心纵坐标
    // r: 圆半径
    // start: 起始弧度 0度时的方向为水平向右 顺时针为正方向
    // end: 结束弧度
    ctx.arc(400, 400, 100, 0, Math.PI / 180 * 30)
    ctx.closePath()

    ctx.fill()
    // ctx.stroke()
</script>

</html>

效果图:

?注意:

fillStyle 可以修改所有使用fill的函数所填充的颜色

strokeStyle 可以修改所有stroke函数的描边颜色

补充的额外方法

?assign()方法? ? ? ? ? ? ? ? ??assign(b,a)将a对象添加到b对象中去,返回值为b

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:59:23  更:2022-09-21 01:00:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/7 4:34:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码