mirror of
https://gitee.com/yanmu_ym/cpp.git
synced 2026-02-04 18:13:14 +08:00
5320 lines
488 KiB
HTML
5320 lines
488 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<link rel="stylesheet" href="style.css">
|
||
<title>Simple DirectMedia Layer</title>
|
||
<style>
|
||
@font-face {
|
||
font-family: octicons-link;
|
||
src: url(data:font/woff;charset=utf-8;base64,d09GRgABAAAAAAZwABAAAAAACFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEU0lHAAAGaAAAAAgAAAAIAAAAAUdTVUIAAAZcAAAACgAAAAoAAQAAT1MvMgAAAyQAAABJAAAAYFYEU3RjbWFwAAADcAAAAEUAAACAAJThvmN2dCAAAATkAAAABAAAAAQAAAAAZnBnbQAAA7gAAACyAAABCUM+8IhnYXNwAAAGTAAAABAAAAAQABoAI2dseWYAAAFsAAABPAAAAZwcEq9taGVhZAAAAsgAAAA0AAAANgh4a91oaGVhAAADCAAAABoAAAAkCA8DRGhtdHgAAAL8AAAADAAAAAwGAACfbG9jYQAAAsAAAAAIAAAACABiATBtYXhwAAACqAAAABgAAAAgAA8ASm5hbWUAAAToAAABQgAAAlXu73sOcG9zdAAABiwAAAAeAAAAME3QpOBwcmVwAAAEbAAAAHYAAAB/aFGpk3jaTY6xa8JAGMW/O62BDi0tJLYQincXEypYIiGJjSgHniQ6umTsUEyLm5BV6NDBP8Tpts6F0v+k/0an2i+itHDw3v2+9+DBKTzsJNnWJNTgHEy4BgG3EMI9DCEDOGEXzDADU5hBKMIgNPZqoD3SilVaXZCER3/I7AtxEJLtzzuZfI+VVkprxTlXShWKb3TBecG11rwoNlmmn1P2WYcJczl32etSpKnziC7lQyWe1smVPy/Lt7Kc+0vWY/gAgIIEqAN9we0pwKXreiMasxvabDQMM4riO+qxM2ogwDGOZTXxwxDiycQIcoYFBLj5K3EIaSctAq2kTYiw+ymhce7vwM9jSqO8JyVd5RH9gyTt2+J/yUmYlIR0s04n6+7Vm1ozezUeLEaUjhaDSuXHwVRgvLJn1tQ7xiuVv/ocTRF42mNgZGBgYGbwZOBiAAFGJBIMAAizAFoAAABiAGIAznjaY2BkYGAA4in8zwXi+W2+MjCzMIDApSwvXzC97Z4Ig8N/BxYGZgcgl52BCSQKAA3jCV8CAABfAAAAAAQAAEB42mNgZGBg4f3vACQZQABIMjKgAmYAKEgBXgAAeNpjYGY6wTiBgZWBg2kmUxoDA4MPhGZMYzBi1AHygVLYQUCaawqDA4PChxhmh/8ODDEsvAwHgMKMIDnGL0x7gJQCAwMAJd4MFwAAAHjaY2BgYGaA4DAGRgYQkAHyGMF8NgYrIM3JIAGVYYDT+AEjAwuDFpBmA9KMDEwMCh9i/v8H8sH0/4dQc1iAmAkALaUKLgAAAHjaTY9LDsIgEIbtgqHUPpDi3gPoBVyRTmTddOmqTXThEXqrob2gQ1FjwpDvfwCBdmdXC5AVKFu3e5MfNFJ29KTQT48Ob9/lqYwOGZxeUelN2U2R6+cArgtCJpauW7UQBqnFkUsjAY/kOU1cP+DAgvxwn1chZDwUbd6CFimGXwzwF6tPbFIcjEl+vvmM/byA48e6tWrKArm4ZJlCbdsrxksL1AwWn/yBSJKpYbq8AXaaTb8AAHja28jAwOC00ZrBeQNDQOWO//sdBBgYGRiYWYAEELEwMTE4uzo5Zzo5b2BxdnFOcALxNjA6b2ByTswC8jYwg0VlNuoCTWAMqNzMzsoK1rEhNqByEyerg5PMJlYuVueETKcd/89uBpnpvIEVomeHLoMsAAe1Id4AAAAAAAB42oWQT07CQBTGv0JBhagk7HQzKxca2sJCE1hDt4QF+9JOS0nbaaYDCQfwCJ7Au3AHj+LO13FMmm6cl7785vven0kBjHCBhfpYuNa5Ph1c0e2Xu3jEvWG7UdPDLZ4N92nOm+EBXuAbHmIMSRMs+4aUEd4Nd3CHD8NdvOLTsA2GL8M9PODbcL+hD7C1xoaHeLJSEao0FEW14ckxC+TU8TxvsY6X0eLPmRhry2WVioLpkrbp84LLQPGI7c6sOiUzpWIWS5GzlSgUzzLBSikOPFTOXqly7rqx0Z1Q5BAIoZBSFihQYQOOBEdkCOgXTOHA07HAGjGWiIjaPZNW13/+lm6S9FT7rLHFJ6fQbkATOG1j2OFMucKJJsxIVfQORl+9Jyda6Sl1dUYhSCm1dyClfoeDve4qMYdLEbfqHf3O/AdDumsjAAB42mNgYoAAZQYjBmyAGYQZmdhL8zLdDEydARfoAqIAAAABAAMABwAKABMAB///AA8AAQAAAAAAAAAAAAAAAAABAAAAAA==) format('woff');
|
||
}
|
||
|
||
.markdown-body .octicon {
|
||
display: inline-block;
|
||
fill: currentColor;
|
||
vertical-align: text-bottom;
|
||
}
|
||
|
||
.markdown-body .anchor {
|
||
float: left;
|
||
line-height: 1;
|
||
margin-left: -20px;
|
||
padding-right: 4px;
|
||
}
|
||
|
||
.markdown-body .anchor:focus {
|
||
outline: none;
|
||
}
|
||
|
||
.markdown-body h1 .octicon-link,
|
||
.markdown-body h2 .octicon-link,
|
||
.markdown-body h3 .octicon-link,
|
||
.markdown-body h4 .octicon-link,
|
||
.markdown-body h5 .octicon-link,
|
||
.markdown-body h6 .octicon-link {
|
||
color: #1b1f23;
|
||
vertical-align: middle;
|
||
visibility: hidden;
|
||
}
|
||
|
||
.markdown-body h1:hover .anchor,
|
||
.markdown-body h2:hover .anchor,
|
||
.markdown-body h3:hover .anchor,
|
||
.markdown-body h4:hover .anchor,
|
||
.markdown-body h5:hover .anchor,
|
||
.markdown-body h6:hover .anchor {
|
||
text-decoration: none;
|
||
}
|
||
|
||
.markdown-body h1:hover .anchor .octicon-link,
|
||
.markdown-body h2:hover .anchor .octicon-link,
|
||
.markdown-body h3:hover .anchor .octicon-link,
|
||
.markdown-body h4:hover .anchor .octicon-link,
|
||
.markdown-body h5:hover .anchor .octicon-link,
|
||
.markdown-body h6:hover .anchor .octicon-link {
|
||
visibility: visible;
|
||
}
|
||
|
||
.markdown-body {
|
||
-ms-text-size-adjust: 100%;
|
||
-webkit-text-size-adjust: 100%;
|
||
color: #24292e;
|
||
line-height: 1.5;
|
||
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;
|
||
font-size: 16px;
|
||
line-height: 1.5;
|
||
word-wrap: break-word;
|
||
}
|
||
|
||
.markdown-body .pl-c {
|
||
color: #6a737d;
|
||
}
|
||
|
||
.markdown-body .pl-c1,
|
||
.markdown-body .pl-s .pl-v {
|
||
color: #005cc5;
|
||
}
|
||
|
||
.markdown-body .pl-e,
|
||
.markdown-body .pl-en {
|
||
color: #6f42c1;
|
||
}
|
||
|
||
.markdown-body .pl-s .pl-s1,
|
||
.markdown-body .pl-smi {
|
||
color: #24292e;
|
||
}
|
||
|
||
.markdown-body .pl-ent {
|
||
color: #22863a;
|
||
}
|
||
|
||
.markdown-body .pl-k {
|
||
color: #d73a49;
|
||
}
|
||
|
||
.markdown-body .pl-pds,
|
||
.markdown-body .pl-s,
|
||
.markdown-body .pl-s .pl-pse .pl-s1,
|
||
.markdown-body .pl-sr,
|
||
.markdown-body .pl-sr .pl-cce,
|
||
.markdown-body .pl-sr .pl-sra,
|
||
.markdown-body .pl-sr .pl-sre {
|
||
color: #032f62;
|
||
}
|
||
|
||
.markdown-body .pl-smw,
|
||
.markdown-body .pl-v {
|
||
color: #e36209;
|
||
}
|
||
|
||
.markdown-body .pl-bu {
|
||
color: #b31d28;
|
||
}
|
||
|
||
.markdown-body .pl-ii {
|
||
background-color: #b31d28;
|
||
color: #fafbfc;
|
||
}
|
||
|
||
.markdown-body .pl-c2 {
|
||
background-color: #d73a49;
|
||
color: #fafbfc;
|
||
}
|
||
|
||
.markdown-body .pl-c2:before {
|
||
content: "^M";
|
||
}
|
||
|
||
.markdown-body .pl-sr .pl-cce {
|
||
color: #22863a;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.markdown-body .pl-ml {
|
||
color: #735c0f;
|
||
}
|
||
|
||
.markdown-body .pl-mh,
|
||
.markdown-body .pl-mh .pl-en,
|
||
.markdown-body .pl-ms {
|
||
color: #005cc5;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.markdown-body .pl-mi {
|
||
color: #24292e;
|
||
font-style: italic;
|
||
}
|
||
|
||
.markdown-body .pl-mb {
|
||
color: #24292e;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.markdown-body .pl-md {
|
||
background-color: #ffeef0;
|
||
color: #b31d28;
|
||
}
|
||
|
||
.markdown-body .pl-mi1 {
|
||
background-color: #f0fff4;
|
||
color: #22863a;
|
||
}
|
||
|
||
.markdown-body .pl-mc {
|
||
background-color: #ffebda;
|
||
color: #e36209;
|
||
}
|
||
|
||
.markdown-body .pl-mi2 {
|
||
background-color: #005cc5;
|
||
color: #f6f8fa;
|
||
}
|
||
|
||
.markdown-body .pl-mdr {
|
||
color: #6f42c1;
|
||
font-weight: 700;
|
||
}
|
||
|
||
.markdown-body .pl-ba {
|
||
color: #586069;
|
||
}
|
||
|
||
.markdown-body .pl-sg {
|
||
color: #959da5;
|
||
}
|
||
|
||
.markdown-body .pl-corl {
|
||
color: #032f62;
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.markdown-body details {
|
||
display: block;
|
||
}
|
||
|
||
.markdown-body summary {
|
||
display: list-item;
|
||
}
|
||
|
||
.markdown-body a {
|
||
background-color: transparent;
|
||
}
|
||
|
||
.markdown-body a:active,
|
||
.markdown-body a:hover {
|
||
outline-width: 0;
|
||
}
|
||
|
||
.markdown-body strong {
|
||
font-weight: inherit;
|
||
font-weight: bolder;
|
||
}
|
||
|
||
.markdown-body h1 {
|
||
font-size: 2em;
|
||
margin: .67em 0;
|
||
}
|
||
|
||
.markdown-body img {
|
||
border-style: none;
|
||
}
|
||
|
||
.markdown-body code,
|
||
.markdown-body kbd,
|
||
.markdown-body pre {
|
||
font-family: monospace,monospace;
|
||
font-size: 1em;
|
||
}
|
||
|
||
.markdown-body hr {
|
||
box-sizing: content-box;
|
||
height: 0;
|
||
overflow: visible;
|
||
}
|
||
|
||
.markdown-body input {
|
||
font: inherit;
|
||
margin: 0;
|
||
}
|
||
|
||
.markdown-body input {
|
||
overflow: visible;
|
||
}
|
||
|
||
.markdown-body [type=checkbox] {
|
||
box-sizing: border-box;
|
||
padding: 0;
|
||
}
|
||
|
||
.markdown-body * {
|
||
box-sizing: border-box;
|
||
}
|
||
|
||
.markdown-body input {
|
||
font-family: inherit;
|
||
font-size: inherit;
|
||
line-height: inherit;
|
||
}
|
||
|
||
.markdown-body a {
|
||
color: #0366d6;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.markdown-body a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
|
||
.markdown-body strong {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.markdown-body hr {
|
||
background: transparent;
|
||
border: 0;
|
||
border-bottom: 1px solid #dfe2e5;
|
||
height: 0;
|
||
margin: 15px 0;
|
||
overflow: hidden;
|
||
}
|
||
|
||
.markdown-body hr:before {
|
||
content: "";
|
||
display: table;
|
||
}
|
||
|
||
.markdown-body hr:after {
|
||
clear: both;
|
||
content: "";
|
||
display: table;
|
||
}
|
||
|
||
.markdown-body table {
|
||
border-collapse: collapse;
|
||
border-spacing: 0;
|
||
}
|
||
|
||
.markdown-body td,
|
||
.markdown-body th {
|
||
padding: 0;
|
||
}
|
||
|
||
.markdown-body details summary {
|
||
cursor: pointer;
|
||
}
|
||
|
||
.markdown-body h1,
|
||
.markdown-body h2,
|
||
.markdown-body h3,
|
||
.markdown-body h4,
|
||
.markdown-body h5,
|
||
.markdown-body h6 {
|
||
margin-bottom: 0;
|
||
margin-top: 0;
|
||
}
|
||
|
||
.markdown-body h1 {
|
||
font-size: 32px;
|
||
}
|
||
|
||
.markdown-body h1,
|
||
.markdown-body h2 {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.markdown-body h2 {
|
||
font-size: 24px;
|
||
}
|
||
|
||
.markdown-body h3 {
|
||
font-size: 20px;
|
||
}
|
||
|
||
.markdown-body h3,
|
||
.markdown-body h4 {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.markdown-body h4 {
|
||
font-size: 16px;
|
||
}
|
||
|
||
.markdown-body h5 {
|
||
font-size: 14px;
|
||
}
|
||
|
||
.markdown-body h5,
|
||
.markdown-body h6 {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.markdown-body h6 {
|
||
font-size: 12px;
|
||
}
|
||
|
||
.markdown-body p {
|
||
margin-bottom: 10px;
|
||
margin-top: 0;
|
||
}
|
||
|
||
.markdown-body blockquote {
|
||
margin: 0;
|
||
}
|
||
|
||
.markdown-body ol,
|
||
.markdown-body ul {
|
||
margin-bottom: 0;
|
||
margin-top: 0;
|
||
padding-left: 0;
|
||
}
|
||
|
||
.markdown-body ol ol,
|
||
.markdown-body ul ol {
|
||
list-style-type: lower-roman;
|
||
}
|
||
|
||
.markdown-body ol ol ol,
|
||
.markdown-body ol ul ol,
|
||
.markdown-body ul ol ol,
|
||
.markdown-body ul ul ol {
|
||
list-style-type: lower-alpha;
|
||
}
|
||
|
||
.markdown-body dd {
|
||
margin-left: 0;
|
||
}
|
||
|
||
.markdown-body code,
|
||
.markdown-body pre {
|
||
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
|
||
font-size: 12px;
|
||
}
|
||
|
||
.markdown-body pre {
|
||
margin-bottom: 0;
|
||
margin-top: 0;
|
||
}
|
||
|
||
.markdown-body input::-webkit-inner-spin-button,
|
||
.markdown-body input::-webkit-outer-spin-button {
|
||
-webkit-appearance: none;
|
||
appearance: none;
|
||
margin: 0;
|
||
}
|
||
|
||
.markdown-body .border {
|
||
border: 1px solid #e1e4e8!important;
|
||
}
|
||
|
||
.markdown-body .border-0 {
|
||
border: 0!important;
|
||
}
|
||
|
||
.markdown-body .border-bottom {
|
||
border-bottom: 1px solid #e1e4e8!important;
|
||
}
|
||
|
||
.markdown-body .rounded-1 {
|
||
border-radius: 3px!important;
|
||
}
|
||
|
||
.markdown-body .bg-white {
|
||
background-color: #fff!important;
|
||
}
|
||
|
||
.markdown-body .bg-gray-light {
|
||
background-color: #fafbfc!important;
|
||
}
|
||
|
||
.markdown-body .text-gray-light {
|
||
color: #6a737d!important;
|
||
}
|
||
|
||
.markdown-body .mb-0 {
|
||
margin-bottom: 0!important;
|
||
}
|
||
|
||
.markdown-body .my-2 {
|
||
margin-bottom: 8px!important;
|
||
margin-top: 8px!important;
|
||
}
|
||
|
||
.markdown-body .pl-0 {
|
||
padding-left: 0!important;
|
||
}
|
||
|
||
.markdown-body .py-0 {
|
||
padding-bottom: 0!important;
|
||
padding-top: 0!important;
|
||
}
|
||
|
||
.markdown-body .pl-1 {
|
||
padding-left: 4px!important;
|
||
}
|
||
|
||
.markdown-body .pl-2 {
|
||
padding-left: 8px!important;
|
||
}
|
||
|
||
.markdown-body .py-2 {
|
||
padding-bottom: 8px!important;
|
||
padding-top: 8px!important;
|
||
}
|
||
|
||
.markdown-body .pl-3,
|
||
.markdown-body .px-3 {
|
||
padding-left: 16px!important;
|
||
}
|
||
|
||
.markdown-body .px-3 {
|
||
padding-right: 16px!important;
|
||
}
|
||
|
||
.markdown-body .pl-4 {
|
||
padding-left: 24px!important;
|
||
}
|
||
|
||
.markdown-body .pl-5 {
|
||
padding-left: 32px!important;
|
||
}
|
||
|
||
.markdown-body .pl-6 {
|
||
padding-left: 40px!important;
|
||
}
|
||
|
||
.markdown-body .f6 {
|
||
font-size: 12px!important;
|
||
}
|
||
|
||
.markdown-body .lh-condensed {
|
||
line-height: 1.25!important;
|
||
}
|
||
|
||
.markdown-body .text-bold {
|
||
font-weight: 600!important;
|
||
}
|
||
|
||
.markdown-body:before {
|
||
content: "";
|
||
display: table;
|
||
}
|
||
|
||
.markdown-body:after {
|
||
clear: both;
|
||
content: "";
|
||
display: table;
|
||
}
|
||
|
||
.markdown-body>:first-child {
|
||
margin-top: 0!important;
|
||
}
|
||
|
||
.markdown-body>:last-child {
|
||
margin-bottom: 0!important;
|
||
}
|
||
|
||
.markdown-body a:not([href]) {
|
||
color: inherit;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.markdown-body blockquote,
|
||
.markdown-body dl,
|
||
.markdown-body ol,
|
||
.markdown-body p,
|
||
.markdown-body pre,
|
||
.markdown-body table,
|
||
.markdown-body ul {
|
||
margin-bottom: 16px;
|
||
margin-top: 0;
|
||
}
|
||
|
||
.markdown-body hr {
|
||
background-color: #e1e4e8;
|
||
border: 0;
|
||
height: .25em;
|
||
margin: 24px 0;
|
||
padding: 0;
|
||
}
|
||
|
||
.markdown-body blockquote {
|
||
border-left: .25em solid #dfe2e5;
|
||
color: #6a737d;
|
||
padding: 0 1em;
|
||
}
|
||
|
||
.markdown-body blockquote>:first-child {
|
||
margin-top: 0;
|
||
}
|
||
|
||
.markdown-body blockquote>:last-child {
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.markdown-body kbd {
|
||
background-color: #fafbfc;
|
||
border: 1px solid #c6cbd1;
|
||
border-bottom-color: #959da5;
|
||
border-radius: 3px;
|
||
box-shadow: inset 0 -1px 0 #959da5;
|
||
color: #444d56;
|
||
display: inline-block;
|
||
font-size: 11px;
|
||
line-height: 10px;
|
||
padding: 3px 5px;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.markdown-body h1,
|
||
.markdown-body h2,
|
||
.markdown-body h3,
|
||
.markdown-body h4,
|
||
.markdown-body h5,
|
||
.markdown-body h6 {
|
||
font-weight: 600;
|
||
line-height: 1.25;
|
||
margin-bottom: 16px;
|
||
margin-top: 24px;
|
||
}
|
||
|
||
.markdown-body h1 {
|
||
font-size: 2em;
|
||
}
|
||
|
||
.markdown-body h1,
|
||
.markdown-body h2 {
|
||
border-bottom: 1px solid #eaecef;
|
||
padding-bottom: .3em;
|
||
}
|
||
|
||
.markdown-body h2 {
|
||
font-size: 1.5em;
|
||
}
|
||
|
||
.markdown-body h3 {
|
||
font-size: 1.25em;
|
||
}
|
||
|
||
.markdown-body h4 {
|
||
font-size: 1em;
|
||
}
|
||
|
||
.markdown-body h5 {
|
||
font-size: .875em;
|
||
}
|
||
|
||
.markdown-body h6 {
|
||
color: #6a737d;
|
||
font-size: .85em;
|
||
}
|
||
|
||
.markdown-body ol,
|
||
.markdown-body ul {
|
||
padding-left: 2em;
|
||
}
|
||
|
||
.markdown-body ol ol,
|
||
.markdown-body ol ul,
|
||
.markdown-body ul ol,
|
||
.markdown-body ul ul {
|
||
margin-bottom: 0;
|
||
margin-top: 0;
|
||
}
|
||
|
||
.markdown-body li {
|
||
word-wrap: break-all;
|
||
}
|
||
|
||
.markdown-body li>p {
|
||
margin-top: 16px;
|
||
}
|
||
|
||
.markdown-body li+li {
|
||
margin-top: .25em;
|
||
}
|
||
|
||
.markdown-body dl {
|
||
padding: 0;
|
||
}
|
||
|
||
.markdown-body dl dt {
|
||
font-size: 1em;
|
||
font-style: italic;
|
||
font-weight: 600;
|
||
margin-top: 16px;
|
||
padding: 0;
|
||
}
|
||
|
||
.markdown-body dl dd {
|
||
margin-bottom: 16px;
|
||
padding: 0 16px;
|
||
}
|
||
|
||
.markdown-body table {
|
||
display: block;
|
||
overflow: auto;
|
||
width: 100%;
|
||
}
|
||
|
||
.markdown-body table th {
|
||
font-weight: 600;
|
||
}
|
||
|
||
.markdown-body table td,
|
||
.markdown-body table th {
|
||
border: 1px solid #dfe2e5;
|
||
padding: 6px 13px;
|
||
}
|
||
|
||
.markdown-body table tr {
|
||
background-color: #fff;
|
||
border-top: 1px solid #c6cbd1;
|
||
}
|
||
|
||
.markdown-body table tr:nth-child(2n) {
|
||
background-color: #f6f8fa;
|
||
}
|
||
|
||
.markdown-body img {
|
||
background-color: #fff;
|
||
box-sizing: content-box;
|
||
max-width: 100%;
|
||
}
|
||
|
||
.markdown-body img[align=right] {
|
||
padding-left: 20px;
|
||
}
|
||
|
||
.markdown-body img[align=left] {
|
||
padding-right: 20px;
|
||
}
|
||
|
||
.markdown-body code {
|
||
background-color: rgba(27,31,35,.05);
|
||
border-radius: 3px;
|
||
font-size: 85%;
|
||
margin: 0;
|
||
padding: .2em .4em;
|
||
}
|
||
|
||
.markdown-body pre {
|
||
word-wrap: normal;
|
||
}
|
||
|
||
.markdown-body pre>code {
|
||
background: transparent;
|
||
border: 0;
|
||
font-size: 100%;
|
||
margin: 0;
|
||
padding: 0;
|
||
white-space: pre;
|
||
word-break: normal;
|
||
}
|
||
|
||
.markdown-body .highlight {
|
||
margin-bottom: 16px;
|
||
}
|
||
|
||
.markdown-body .highlight pre {
|
||
margin-bottom: 0;
|
||
word-break: normal;
|
||
}
|
||
|
||
.markdown-body .highlight pre,
|
||
.markdown-body pre {
|
||
background-color: #f6f8fa;
|
||
border-radius: 3px;
|
||
font-size: 85%;
|
||
line-height: 1.45;
|
||
overflow: auto;
|
||
padding: 16px;
|
||
}
|
||
|
||
.markdown-body pre code {
|
||
background-color: transparent;
|
||
border: 0;
|
||
display: inline;
|
||
line-height: inherit;
|
||
margin: 0;
|
||
max-width: auto;
|
||
overflow: visible;
|
||
padding: 0;
|
||
word-wrap: normal;
|
||
}
|
||
|
||
.markdown-body .commit-tease-sha {
|
||
color: #444d56;
|
||
display: inline-block;
|
||
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
|
||
font-size: 90%;
|
||
}
|
||
|
||
.markdown-body .blob-wrapper {
|
||
border-bottom-left-radius: 3px;
|
||
border-bottom-right-radius: 3px;
|
||
overflow-x: auto;
|
||
overflow-y: hidden;
|
||
}
|
||
|
||
.markdown-body .blob-wrapper-embedded {
|
||
max-height: 240px;
|
||
overflow-y: auto;
|
||
}
|
||
|
||
.markdown-body .blob-num {
|
||
-moz-user-select: none;
|
||
-ms-user-select: none;
|
||
-webkit-user-select: none;
|
||
color: rgba(27,31,35,.3);
|
||
cursor: pointer;
|
||
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
|
||
font-size: 12px;
|
||
line-height: 20px;
|
||
min-width: 50px;
|
||
padding-left: 10px;
|
||
padding-right: 10px;
|
||
text-align: right;
|
||
user-select: none;
|
||
vertical-align: top;
|
||
white-space: nowrap;
|
||
width: 1%;
|
||
}
|
||
|
||
.markdown-body .blob-num:hover {
|
||
color: rgba(27,31,35,.6);
|
||
}
|
||
|
||
.markdown-body .blob-num:before {
|
||
content: attr(data-line-number);
|
||
}
|
||
|
||
.markdown-body .blob-code {
|
||
line-height: 20px;
|
||
padding-left: 10px;
|
||
padding-right: 10px;
|
||
position: relative;
|
||
vertical-align: top;
|
||
}
|
||
|
||
.markdown-body .blob-code-inner {
|
||
color: #24292e;
|
||
font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
|
||
font-size: 12px;
|
||
overflow: visible;
|
||
white-space: pre;
|
||
word-wrap: normal;
|
||
}
|
||
|
||
.markdown-body .pl-token.active,
|
||
.markdown-body .pl-token:hover {
|
||
background: #ffea7f;
|
||
cursor: pointer;
|
||
}
|
||
|
||
.markdown-body kbd {
|
||
background-color: #fafbfc;
|
||
border: 1px solid #d1d5da;
|
||
border-bottom-color: #c6cbd1;
|
||
border-radius: 3px;
|
||
box-shadow: inset 0 -1px 0 #c6cbd1;
|
||
color: #444d56;
|
||
display: inline-block;
|
||
font: 11px SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace;
|
||
line-height: 10px;
|
||
padding: 3px 5px;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.markdown-body :checked+.radio-label {
|
||
border-color: #0366d6;
|
||
position: relative;
|
||
z-index: 1;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="1"] {
|
||
-moz-tab-size: 1;
|
||
tab-size: 1;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="2"] {
|
||
-moz-tab-size: 2;
|
||
tab-size: 2;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="3"] {
|
||
-moz-tab-size: 3;
|
||
tab-size: 3;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="4"] {
|
||
-moz-tab-size: 4;
|
||
tab-size: 4;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="5"] {
|
||
-moz-tab-size: 5;
|
||
tab-size: 5;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="6"] {
|
||
-moz-tab-size: 6;
|
||
tab-size: 6;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="7"] {
|
||
-moz-tab-size: 7;
|
||
tab-size: 7;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="8"] {
|
||
-moz-tab-size: 8;
|
||
tab-size: 8;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="9"] {
|
||
-moz-tab-size: 9;
|
||
tab-size: 9;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="10"] {
|
||
-moz-tab-size: 10;
|
||
tab-size: 10;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="11"] {
|
||
-moz-tab-size: 11;
|
||
tab-size: 11;
|
||
}
|
||
|
||
.markdown-body .tab-size[data-tab-size="12"] {
|
||
-moz-tab-size: 12;
|
||
tab-size: 12;
|
||
}
|
||
|
||
.markdown-body .task-list-item {
|
||
list-style-type: none;
|
||
}
|
||
|
||
.markdown-body .task-list-item+.task-list-item {
|
||
margin-top: 3px;
|
||
}
|
||
|
||
.markdown-body .task-list-item input {
|
||
margin: 0 .2em .25em -1.6em;
|
||
vertical-align: middle;
|
||
}
|
||
|
||
.markdown-body hr {
|
||
border-bottom-color: #eee;
|
||
}
|
||
|
||
.markdown-body .pl-0 {
|
||
padding-left: 0!important;
|
||
}
|
||
|
||
.markdown-body .pl-1 {
|
||
padding-left: 4px!important;
|
||
}
|
||
|
||
.markdown-body .pl-2 {
|
||
padding-left: 8px!important;
|
||
}
|
||
|
||
.markdown-body .pl-3 {
|
||
padding-left: 16px!important;
|
||
}
|
||
|
||
.markdown-body .pl-4 {
|
||
padding-left: 24px!important;
|
||
}
|
||
|
||
.markdown-body .pl-5 {
|
||
padding-left: 32px!important;
|
||
}
|
||
|
||
.markdown-body .pl-6 {
|
||
padding-left: 40px!important;
|
||
}
|
||
|
||
.markdown-body .pl-7 {
|
||
padding-left: 48px!important;
|
||
}
|
||
|
||
.markdown-body .pl-8 {
|
||
padding-left: 64px!important;
|
||
}
|
||
|
||
.markdown-body .pl-9 {
|
||
padding-left: 80px!important;
|
||
}
|
||
|
||
.markdown-body .pl-10 {
|
||
padding-left: 96px!important;
|
||
}
|
||
|
||
.markdown-body .pl-11 {
|
||
padding-left: 112px!important;
|
||
}
|
||
|
||
.markdown-body .pl-12 {
|
||
padding-left: 128px!important;
|
||
}
|
||
|
||
/*# sourceURL=webpack://./node_modules/github-markdown-css/github-markdown.css */
|
||
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9naXRodWItbWFya2Rvd24tY3NzL2dpdGh1Yi1tYXJrZG93bi5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSwwQkFBMEI7RUFDMUIsMkRBQXF0RTtBQUN2dEU7O0FBRUE7RUFDRSxxQkFBcUI7RUFDckIsa0JBQWtCO0VBQ2xCLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxjQUFjO0VBQ2Qsa0JBQWtCO0VBQ2xCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGFBQWE7QUFDZjs7QUFFQTs7Ozs7O0VBTUUsY0FBYztFQUNkLHNCQUFzQjtFQUN0QixrQkFBa0I7QUFDcEI7O0FBRUE7Ozs7OztFQU1FLHFCQUFxQjtBQUN2Qjs7QUFFQTs7Ozs7O0VBTUUsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsMEJBQTBCO0VBQzFCLDhCQUE4QjtFQUM5QixjQUFjO0VBQ2QsZ0JBQWdCO0VBQ2hCLGtJQUFrSTtFQUNsSSxlQUFlO0VBQ2YsZ0JBQWdCO0VBQ2hCLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7O0VBRUUsY0FBYztBQUNoQjs7QUFFQTs7RUFFRSxjQUFjO0FBQ2hCOztBQUVBOztFQUVFLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTs7Ozs7OztFQU9FLGNBQWM7QUFDaEI7O0FBRUE7O0VBRUUsY0FBYztBQUNoQjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsY0FBYztBQUNoQjs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsYUFBYTtBQUNmOztBQUVBO0VBQ0UsY0FBYztFQUNkLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7OztFQUdFLGNBQWM7RUFDZCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxjQUFjO0VBQ2Qsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsY0FBYztFQUNkLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIsY0FBYztBQUNoQjs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsY0FBYztFQUNkLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsY0FBYztFQUNkLDBCQUEwQjtBQUM1Qjs7QUFFQTtFQUNFLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSw2QkFBNkI7QUFDL0I7O0FBRUE7O0VBRUUsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGNBQWM7RUFDZCxlQUFlO0FBQ2pCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBOzs7RUFHRSxnQ0FBZ0M7RUFDaEMsY0FBYztBQUNoQjs7QUFFQTtFQUNFLHVCQUF1QjtFQUN2QixTQUFTO0VBQ1QsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsYUFBYTtFQUNiLFNBQVM7QUFDWDs7QUFFQTtFQUNFLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLHNCQUFzQjtFQUN0QixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxzQkFBc0I7QUFDeEI7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsa0JBQWtCO0VBQ2xCLG9CQUFvQjtBQUN0Qjs7QUFFQTtFQUNFLGNBQWM7RUFDZCxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSwwQkFBMEI7QUFDNUI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSx1QkFBdUI7RUFDdkIsU0FBUztFQUNULGdDQUFnQztFQUNoQyxTQUFTO0VBQ1QsY0FBYztFQUNkLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLFdBQVc7RUFDWCxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsV0FBVztFQUNYLFdBQVc7RUFDWCxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLGlCQUFpQjtBQUNuQjs7QUFFQTs7RUFFRSxVQUFVO0FBQ1o7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBOzs7Ozs7RUFNRSxnQkFBZ0I7RUFDaEIsYUFBYTtBQUNmOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTs7RUFFRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTs7RUFFRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTs7RUFFRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsbUJBQW1CO0VBQ25CLGFBQWE7QUFDZjs7QUFFQTtFQUNFLFNBQVM7QUFDWDs7QUFFQTs7RUFFRSxnQkFBZ0I7RUFDaEIsYUFBYTtFQUNiLGVBQWU7QUFDakI7O0FBRUE7O0VBRUUsNEJBQTRCO0FBQzlCOztBQUVBOzs7O0VBSUUsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTs7RUFFRSw0RUFBNEU7RUFDNUUsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixhQUFhO0FBQ2Y7O0FBRUE7O0VBRUUsd0JBQXdCO0VBQ3hCLGdCQUFnQjtFQUNoQixTQUFTO0FBQ1g7O0FBRUE7RUFDRSxtQ0FBbUM7QUFDckM7O0FBRUE7RUFDRSxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSwwQ0FBMEM7QUFDNUM7O0FBRUE7RUFDRSw0QkFBNEI7QUFDOUI7O0FBRUE7RUFDRSxnQ0FBZ0M7QUFDbEM7O0FBRUE7RUFDRSxtQ0FBbUM7QUFDckM7O0FBRUE7RUFDRSx3QkFBd0I7QUFDMUI7O0FBRUE7RUFDRSwwQkFBMEI7QUFDNUI7O0FBRUE7RUFDRSw0QkFBNEI7RUFDNUIseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsMkJBQTJCO0VBQzNCLHdCQUF3QjtBQUMxQjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLDZCQUE2QjtFQUM3QiwwQkFBMEI7QUFDNUI7O0FBRUE7O0VBRUUsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsMkJBQTJCO0FBQzdCOztBQUVBO0VBQ0UsMEJBQTBCO0FBQzVCOztBQUVBO0VBQ0UsV0FBVztFQUNYLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsV0FBVztFQUNYLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSx1QkFBdUI7QUFDekI7O0FBRUE7RUFDRSwwQkFBMEI7QUFDNUI7O0FBRUE7RUFDRSxjQUFjO0VBQ2QscUJBQXFCO0FBQ3ZCOztBQUVBOzs7Ozs7O0VBT0UsbUJBQW1CO0VBQ25CLGFBQWE7QUFDZjs7QUFFQTtFQUNFLHlCQUF5QjtFQUN6QixTQUFTO0VBQ1QsYUFBYTtFQUNiLGNBQWM7RUFDZCxVQUFVO0FBQ1o7O0FBRUE7RUFDRSxnQ0FBZ0M7RUFDaEMsY0FBYztFQUNkLGNBQWM7QUFDaEI7O0FBRUE7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLDRCQUE0QjtFQUM1QixrQkFBa0I7RUFDbEIsa0NBQWtDO0VBQ2xDLGNBQWM7RUFDZCxxQkFBcUI7RUFDckIsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsc0JBQXNCO0FBQ3hCOztBQUVBOzs7Ozs7RUFNRSxnQkFBZ0I7RUFDaEIsaUJBQWlCO0VBQ2pCLG1CQUFtQjtFQUNuQixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBOztFQUVFLGdDQUFnQztFQUNoQyxvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxjQUFjO0FBQ2hCOztBQUVBO0VBQ0UsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsY0FBYztFQUNkLGdCQUFnQjtBQUNsQjs7QUFFQTs7RUFFRSxpQkFBaUI7QUFDbkI7O0FBRUE7Ozs7RUFJRSxnQkFBZ0I7RUFDaEIsYUFBYTtBQUNmOztBQUVBO0VBQ0Usb0JBQW9CO0FBQ3RCOztBQUVBO0VBQ0UsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsVUFBVTtBQUNaOztBQUVBO0VBQ0UsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixnQkFBZ0I7RUFDaEIsZ0JBQWdCO0VBQ2hCLFVBQVU7QUFDWjs7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQixlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsY0FBYztFQUNkLGNBQWM7RUFDZCxXQUFXO0FBQ2I7O0FBRUE7RUFDRSxnQkFBZ0I7QUFDbEI7O0FBRUE7O0VBRUUseUJBQXlCO0VBQ3pCLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLHNCQUFzQjtFQUN0Qiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSx5QkFBeUI7QUFDM0I7O0FBRUE7RUFDRSxzQkFBc0I7RUFDdEIsdUJBQXVCO0VBQ3ZCLGVBQWU7QUFDakI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxvQ0FBb0M7RUFDcEMsa0JBQWtCO0VBQ2xCLGNBQWM7RUFDZCxTQUFTO0VBQ1Qsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsdUJBQXVCO0VBQ3ZCLFNBQVM7RUFDVCxlQUFlO0VBQ2YsU0FBUztFQUNULFVBQVU7RUFDVixnQkFBZ0I7RUFDaEIsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtBQUNwQjs7QUFFQTs7RUFFRSx5QkFBeUI7RUFDekIsa0JBQWtCO0VBQ2xCLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsY0FBYztFQUNkLGFBQWE7QUFDZjs7QUFFQTtFQUNFLDZCQUE2QjtFQUM3QixTQUFTO0VBQ1QsZUFBZTtFQUNmLG9CQUFvQjtFQUNwQixTQUFTO0VBQ1QsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixVQUFVO0VBQ1YsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsY0FBYztFQUNkLHFCQUFxQjtFQUNyQiw0RUFBNEU7RUFDNUUsY0FBYztBQUNoQjs7QUFFQTtFQUNFLDhCQUE4QjtFQUM5QiwrQkFBK0I7RUFDL0IsZ0JBQWdCO0VBQ2hCLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxzQkFBc0I7RUFDdEIscUJBQXFCO0VBQ3JCLHlCQUF5QjtFQUN6Qix3QkFBd0I7RUFDeEIsZUFBZTtFQUNmLDRFQUE0RTtFQUM1RSxlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsbUJBQW1CO0VBQ25CLGlCQUFpQjtFQUNqQixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLG1CQUFtQjtFQUNuQixTQUFTO0FBQ1g7O0FBRUE7RUFDRSx3QkFBd0I7QUFDMUI7O0FBRUE7RUFDRSwrQkFBK0I7QUFDakM7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsa0JBQWtCO0VBQ2xCLG1CQUFtQjtFQUNuQixrQkFBa0I7RUFDbEIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsY0FBYztFQUNkLDRFQUE0RTtFQUM1RSxlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGdCQUFnQjtFQUNoQixpQkFBaUI7QUFDbkI7O0FBRUE7O0VBRUUsbUJBQW1CO0VBQ25CLGVBQWU7QUFDakI7O0FBRUE7RUFDRSx5QkFBeUI7RUFDekIseUJBQXlCO0VBQ3pCLDRCQUE0QjtFQUM1QixrQkFBa0I7RUFDbEIsa0NBQWtDO0VBQ2xDLGNBQWM7RUFDZCxxQkFBcUI7RUFDckIsMEVBQTBFO0VBQzFFLGlCQUFpQjtFQUNqQixnQkFBZ0I7RUFDaEIsc0JBQXNCO0FBQ3hCOztBQUVBO0VBQ0UscUJBQXFCO0VBQ3JCLGtCQUFrQjtFQUNsQixVQUFVO0FBQ1o7O0FBRUE7RUFDRSxnQkFBZ0I7RUFDaEIsV0FBVztBQUNiOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSxnQkFBZ0I7RUFDaEIsV0FBVztBQUNiOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSxnQkFBZ0I7RUFDaEIsV0FBVztBQUNiOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsWUFBWTtBQUNkOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFlBQVk7QUFDZDs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsMkJBQTJCO0VBQzNCLHNCQUFzQjtBQUN4Qjs7QUFFQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLDJCQUEyQjtBQUM3Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDRCQUE0QjtBQUM5Qjs7QUFFQTtFQUNFLDZCQUE2QjtBQUMvQjs7QUFFQTtFQUNFLDZCQUE2QjtBQUMvQiIsInNvdXJjZVJvb3QiOiIifQ== */
|
||
</style>
|
||
<style>
|
||
/**
|
||
* prism.js default theme for JavaScript, CSS and HTML
|
||
* Based on dabblet (http://dabblet.com)
|
||
* @author Lea Verou
|
||
*/
|
||
|
||
code[class*="language-"],
|
||
pre[class*="language-"] {
|
||
color: black;
|
||
background: none;
|
||
text-shadow: 0 1px white;
|
||
font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
|
||
font-size: 1em;
|
||
text-align: left;
|
||
white-space: pre;
|
||
word-spacing: normal;
|
||
word-break: normal;
|
||
word-wrap: normal;
|
||
line-height: 1.5;
|
||
|
||
-moz-tab-size: 4;
|
||
-o-tab-size: 4;
|
||
tab-size: 4;
|
||
|
||
-webkit-hyphens: none;
|
||
-moz-hyphens: none;
|
||
-ms-hyphens: none;
|
||
hyphens: none;
|
||
}
|
||
|
||
pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
|
||
code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
|
||
text-shadow: none;
|
||
background: #b3d4fc;
|
||
}
|
||
|
||
pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
|
||
code[class*="language-"]::selection, code[class*="language-"] ::selection {
|
||
text-shadow: none;
|
||
background: #b3d4fc;
|
||
}
|
||
|
||
@media print {
|
||
code[class*="language-"],
|
||
pre[class*="language-"] {
|
||
text-shadow: none;
|
||
}
|
||
}
|
||
|
||
/* Code blocks */
|
||
pre[class*="language-"] {
|
||
padding: 1em;
|
||
margin: .5em 0;
|
||
overflow: auto;
|
||
}
|
||
|
||
:not(pre) > code[class*="language-"],
|
||
pre[class*="language-"] {
|
||
background: #f5f2f0;
|
||
}
|
||
|
||
/* Inline code */
|
||
:not(pre) > code[class*="language-"] {
|
||
padding: .1em;
|
||
border-radius: .3em;
|
||
white-space: normal;
|
||
}
|
||
|
||
.token.comment,
|
||
.token.prolog,
|
||
.token.doctype,
|
||
.token.cdata {
|
||
color: slategray;
|
||
}
|
||
|
||
.token.punctuation {
|
||
color: #999;
|
||
}
|
||
|
||
.token.namespace {
|
||
opacity: .7;
|
||
}
|
||
|
||
.token.property,
|
||
.token.tag,
|
||
.token.boolean,
|
||
.token.number,
|
||
.token.constant,
|
||
.token.symbol,
|
||
.token.deleted {
|
||
color: #905;
|
||
}
|
||
|
||
.token.selector,
|
||
.token.attr-name,
|
||
.token.string,
|
||
.token.char,
|
||
.token.builtin,
|
||
.token.inserted {
|
||
color: #690;
|
||
}
|
||
|
||
.token.operator,
|
||
.token.entity,
|
||
.token.url,
|
||
.language-css .token.string,
|
||
.style .token.string {
|
||
color: #9a6e3a;
|
||
/* This background color was intended by the author of this theme. */
|
||
background: hsla(0, 0%, 100%, .5);
|
||
}
|
||
|
||
.token.atrule,
|
||
.token.attr-value,
|
||
.token.keyword {
|
||
color: #07a;
|
||
}
|
||
|
||
.token.function,
|
||
.token.class-name {
|
||
color: #DD4A68;
|
||
}
|
||
|
||
.token.regex,
|
||
.token.important,
|
||
.token.variable {
|
||
color: #e90;
|
||
}
|
||
|
||
.token.important,
|
||
.token.bold {
|
||
font-weight: bold;
|
||
}
|
||
.token.italic {
|
||
font-style: italic;
|
||
}
|
||
|
||
.token.entity {
|
||
cursor: help;
|
||
}
|
||
|
||
/*# sourceURL=webpack://./node_modules/prismjs/themes/prism.css */
|
||
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9wcmlzbWpzL3RoZW1lcy9wcmlzbS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7RUFJRTs7QUFFRjs7Q0FFQyxZQUFZO0NBQ1osZ0JBQWdCO0NBQ2hCLHdCQUF3QjtDQUN4QixzRUFBc0U7Q0FDdEUsY0FBYztDQUNkLGdCQUFnQjtDQUNoQixnQkFBZ0I7Q0FDaEIsb0JBQW9CO0NBQ3BCLGtCQUFrQjtDQUNsQixpQkFBaUI7Q0FDakIsZ0JBQWdCOztDQUVoQixnQkFBZ0I7Q0FDaEIsY0FBYztDQUNkLFdBQVc7O0NBRVgscUJBQXFCO0NBQ3JCLGtCQUFrQjtDQUNsQixpQkFBaUI7Q0FDakIsYUFBYTtBQUNkOztBQUVBOztDQUVDLGlCQUFpQjtDQUNqQixtQkFBbUI7QUFDcEI7O0FBRUE7O0NBRUMsaUJBQWlCO0NBQ2pCLG1CQUFtQjtBQUNwQjs7QUFFQTtDQUNDOztFQUVDLGlCQUFpQjtDQUNsQjtBQUNEOztBQUVBLGdCQUFnQjtBQUNoQjtDQUNDLFlBQVk7Q0FDWixjQUFjO0NBQ2QsY0FBYztBQUNmOztBQUVBOztDQUVDLG1CQUFtQjtBQUNwQjs7QUFFQSxnQkFBZ0I7QUFDaEI7Q0FDQyxhQUFhO0NBQ2IsbUJBQW1CO0NBQ25CLG1CQUFtQjtBQUNwQjs7QUFFQTs7OztDQUlDLGdCQUFnQjtBQUNqQjs7QUFFQTtDQUNDLFdBQVc7QUFDWjs7QUFFQTtDQUNDLFdBQVc7QUFDWjs7QUFFQTs7Ozs7OztDQU9DLFdBQVc7QUFDWjs7QUFFQTs7Ozs7O0NBTUMsV0FBVztBQUNaOztBQUVBOzs7OztDQUtDLGNBQWM7Q0FDZCxvRUFBb0U7Q0FDcEUsaUNBQWlDO0FBQ2xDOztBQUVBOzs7Q0FHQyxXQUFXO0FBQ1o7O0FBRUE7O0NBRUMsY0FBYztBQUNmOztBQUVBOzs7Q0FHQyxXQUFXO0FBQ1o7O0FBRUE7O0NBRUMsaUJBQWlCO0FBQ2xCO0FBQ0E7Q0FDQyxrQkFBa0I7QUFDbkI7O0FBRUE7Q0FDQyxZQUFZO0FBQ2IiLCJzb3VyY2VSb290IjoiIn0= */
|
||
</style>
|
||
<style>
|
||
|
||
</style>
|
||
<style>
|
||
.markdown-body {
|
||
font-family: -apple-system,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;
|
||
box-sizing: border-box;
|
||
min-width: 200px;
|
||
max-width: 980px;
|
||
margin: 0 auto;
|
||
padding: 45px;
|
||
}
|
||
|
||
@media not print {
|
||
.markdown-body {
|
||
padding: 45px;
|
||
}
|
||
|
||
@media (max-width: 767px) {
|
||
.markdown-body {
|
||
padding: 15px;
|
||
}
|
||
}
|
||
}
|
||
|
||
.hf-container {
|
||
color: #24292e;
|
||
line-height: 1.3;
|
||
}
|
||
|
||
.markdown-body .highlight pre,
|
||
.markdown-body pre {
|
||
white-space: pre-wrap;
|
||
}
|
||
.markdown-body table {
|
||
display: table;
|
||
}
|
||
.markdown-body img[data-align="center"] {
|
||
display: block;
|
||
margin: 0 auto;
|
||
}
|
||
.markdown-body img[data-align="right"] {
|
||
display: block;
|
||
margin: 0 0 0 auto;
|
||
}
|
||
.markdown-body li.task-list-item {
|
||
list-style-type: none;
|
||
}
|
||
.markdown-body li > [type=checkbox] {
|
||
margin: 0 0 0 -1.3em;
|
||
}
|
||
.markdown-body input[type="checkbox"] ~ p {
|
||
margin-top: 0;
|
||
display: inline-block;
|
||
}
|
||
.markdown-body ol ol,
|
||
.markdown-body ul ol {
|
||
list-style-type: decimal;
|
||
}
|
||
.markdown-body ol ol ol,
|
||
.markdown-body ol ul ol,
|
||
.markdown-body ul ol ol,
|
||
.markdown-body ul ul ol {
|
||
list-style-type: decimal;
|
||
}
|
||
</style>
|
||
<style>.markdown-body a.footnote-ref {
|
||
text-decoration: none;
|
||
}
|
||
|
||
.footnotes {
|
||
font-size: .85em;
|
||
opacity: .8;
|
||
}
|
||
|
||
.footnotes li[role="doc-endnote"] {
|
||
position: relative;
|
||
}
|
||
|
||
.footnotes .footnote-back {
|
||
position: absolute;
|
||
font-family: initial;
|
||
top: .2em;
|
||
right: 1em;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.inline-math.invalid,
|
||
.multiple-math.invalid {
|
||
color: rgb(255, 105, 105);
|
||
}
|
||
|
||
.toc-container {
|
||
width: 100%;
|
||
}
|
||
|
||
.toc-container .toc-title {
|
||
font-weight: 700;
|
||
font-size: 1.2em;
|
||
margin-bottom: 0;
|
||
}
|
||
|
||
.toc-container li,
|
||
.toc-container ul,
|
||
.toc-container ul li {
|
||
list-style: none !important;
|
||
}
|
||
|
||
.toc-container > ul {
|
||
padding-left: 0;
|
||
}
|
||
|
||
.toc-container ul li span {
|
||
display : flex;
|
||
}
|
||
|
||
.toc-container ul li span a {
|
||
color: inherit;
|
||
text-decoration: none;
|
||
}
|
||
.toc-container ul li span a:hover {
|
||
color: inherit;
|
||
text-decoration: none;
|
||
}
|
||
|
||
.toc-container ul li span span.dots {
|
||
flex: 1;
|
||
height: 0.65em;
|
||
margin: 0 10px;
|
||
border-bottom: 2px dotted black;
|
||
}
|
||
|
||
/*# sourceURL=webpack://./src/muya/lib/assets/styles/exportStyle.css */
|
||
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8uL3NyYy9tdXlhL2xpYi9hc3NldHMvc3R5bGVzL2V4cG9ydFN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFLHFCQUFxQjtBQUN2Qjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2I7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsb0JBQW9CO0VBQ3BCLFNBQVM7RUFDVCxVQUFVO0VBQ1YscUJBQXFCO0FBQ3ZCOztBQUVBOztFQUVFLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLFdBQVc7QUFDYjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixnQkFBZ0I7RUFDaEIsZ0JBQWdCO0FBQ2xCOztBQUVBOzs7RUFHRSwyQkFBMkI7QUFDN0I7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTtFQUNFLGNBQWM7RUFDZCxxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLGNBQWM7RUFDZCxxQkFBcUI7QUFDdkI7O0FBRUE7RUFDRSxPQUFPO0VBQ1AsY0FBYztFQUNkLGNBQWM7RUFDZCwrQkFBK0I7QUFDakMiLCJzb3VyY2VSb290IjoiIn0= */</style>
|
||
<style>.markdown-body{}pre.front-matter{display:none!important;}</style>
|
||
</head>
|
||
<body>
|
||
<article class="markdown-body"><div class="toc-container"><p class="toc-title">目录</p><ul class="toc-list"><li><span><a class="toc-h1" href="#预备知识">预备知识</a><span class="dots"></span></span><ul><li><span><a class="toc-h2" href="#sdl是什么">SDL是什么</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#环境准备">环境准备</a><span class="dots"></span></span><ul><li><span><a class="toc-h3" href="#ubuntu">Ubuntu</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#windows">Windows</a><span class="dots"></span></span><ul><li><span><a class="toc-h4" href="#mingw">MinGW</a><span class="dots"></span></span></li><li><span><a class="toc-h4" href="#visual-studio">Visual Studio</a><span class="dots"></span></span></li><li><span><a class="toc-h4" href="#windows上动态链接库找不到的解决办法">Windows上动态链接库找不到的解决办法</a><span class="dots"></span></span></li></ul></li></ul></li></ul></li><li><span><a class="toc-h1" href="#sdl基础应用示例">SDL基础应用示例</a><span class="dots"></span></span><ul><li><span><a class="toc-h2" href="#sdl环境初始化与退出">SDL环境初始化与退出</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#窗口显示">窗口显示</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#事件循环">事件循环</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#图形绘制">图形绘制</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#图片显示">图片显示</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#像素点操作">像素点操作</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#渲染">渲染</a><span class="dots"></span></span><ul><li><span><a class="toc-h3" href="#渲染器创建与清屏">渲染器创建与清屏</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#绘制点、线">绘制点、线</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#绘制、填充矩形区域">绘制、填充矩形区域</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#图片渲染">图片渲染</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#图片缩放、旋转">图片缩放、旋转</a><span class="dots"></span></span></li></ul></li><li><span><a class="toc-h2" href="#代码结构整理">代码结构整理</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#窗口事件">窗口事件</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#鼠标事件">鼠标事件</a><span class="dots"></span></span><ul><li><span><a class="toc-h3" href="#移动">移动</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#按键">按键</a><span class="dots"></span></span></li></ul></li><li><span><a class="toc-h2" href="#键盘事件">键盘事件</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#碰撞以及范围检测">碰撞以及范围检测</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#播放声音">播放声音</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#动画帧率">动画帧率</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#其他模块使用">其他模块使用</a><span class="dots"></span></span></li><li><span><a class="toc-h2" href="#多线程操作">多线程操作</a><span class="dots"></span></span></li></ul></li><li><span><a class="toc-h1" href="#sdl常用函数、结构体、枚举、宏定义">SDL常用函数、结构体、枚举、宏定义</a><span class="dots"></span></span><ul><li><span><a class="toc-h2" href="#函数">函数</a><span class="dots"></span></span><ul><li><span><a class="toc-h3" href="#sdl_init">SDL_Init</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_quit">SDL_Quit</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_createwindow">SDL_CreateWindow</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_destroywindow">SDL_DestroyWindow</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_delay">SDL_Delay</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_log">SDL_Log</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_geterror">SDL_GetError</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_getwindowsurface">SDL_GetWindowSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_freesurface">SDL_FreeSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_fillrect">SDL_FillRect</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_updatewindowsurface">SDL_UpdateWindowSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_maprgb">SDL_MapRGB</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_maprgba">SDL_MapRGBA</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_loadbmp">SDL_LoadBMP</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_blitsurface">SDL_BlitSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_blitscaled">SDL_BlitScaled</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_creatergbsurface">SDL_CreateRGBSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_creatergbsurfacewithformat">SDL_CreateRGBSurfaceWithFormat</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_creatergbsurfacefrom">SDL_CreateRGBSurfaceFrom</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_creatergbsurfacewithformatfrom">SDL_CreateRGBSurfaceWithFormatFrom</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_locksurface">SDL_LockSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_unlocksurface">SDL_UnlockSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_createrenderer">SDL_CreateRenderer</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_destroyrenderer">SDL_DestroyRenderer</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_setrenderdrawcolor">SDL_SetRenderDrawColor</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderclear">SDL_RenderClear</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderpresent">SDL_RenderPresent</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_setrenderdrawblendmode">SDL_SetRenderDrawBlendMode</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderdrawpoint">SDL_RenderDrawPoint</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderdrawpoints">SDL_RenderDrawPoints</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderdrawline">SDL_RenderDrawLine</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderdrawlines">SDL_RenderDrawLines</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderdrawrect">SDL_RenderDrawRect</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderdrawrects">SDL_RenderDrawRects</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderfillrect">SDL_RenderFillRect</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_renderfillrects">SDL_RenderFillRects</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_rendersetscale">SDL_RenderSetScale</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_createtexturefromsurface">SDL_CreateTextureFromSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_destroytexture">SDL_DestroyTexture</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_rendercopy">SDL_RenderCopy</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_rendercopyex">SDL_RenderCopyEx</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_settexturealphamod">SDL_SetTextureAlphaMod</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_settextureblendmode">SDL_SetTextureBlendMode</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_updatetexture">SDL_UpdateTexture</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_updateyuvtexture">SDL_UpdateYUVTexture</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_updatenvtexture">SDL_UpdateNVTexture</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_locktexture">SDL_LockTexture</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_locktexturetosurface">SDL_LockTextureToSurface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_unlocktexture">SDL_UnlockTexture</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_pointinrect">SDL_PointInRect</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_rectempty">SDL_RectEmpty</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_rectequals">SDL_RectEquals</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_hasintersection">SDL_HasIntersection</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_intersectrect">SDL_IntersectRect</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_unionrect">SDL_UnionRect</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_loadwav">SDL_LoadWAV</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_freewav">SDL_FreeWAV</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_openaudiodevice">SDL_OpenAudioDevice</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_pauseaudiodevice">SDL_PauseAudioDevice</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_getaudiodevicename">SDL_GetAudioDeviceName</a><span class="dots"></span></span></li></ul></li><li><span><a class="toc-h2" href="#结构体、枚举、宏定义">结构体、枚举、宏定义</a><span class="dots"></span></span><ul><li><span><a class="toc-h3" href="#sdl_bool">SDL_bool</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_point">SDL_Point</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_rect">SDL_Rect</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_surface">SDL_Surface</a><span class="dots"></span></span></li><li><span><a class="toc-h3" href="#sdl_audiospec">SDL_AudioSpec</a><span class="dots"></span></span></li></ul></li></ul></li><li><span><a class="toc-h1" href="#unknown">Unknown</a><span class="dots"></span></span></li><li><span><a class="toc-h1" href="#cpp多线程">CPP多线程</a><span class="dots"></span></span></li></ul></div><h1 class="atx" id="预备知识">预备知识</h1>
|
||
<h2 class="atx" id="sdl是什么">SDL是什么</h2>
|
||
<p>一个C语言媒体库,可用于音视频播放、游戏制作等媒体层。</p>
|
||
<h2 class="atx" id="环境准备">环境准备</h2>
|
||
<h3 class="atx" id="ubuntu">Ubuntu</h3>
|
||
<p><strong>前置条件</strong></p>
|
||
<p>已安装gcc/g++/make,如果没安装可用下列命令安装</p>
|
||
<pre><code class="fenced-code-block language-shell"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> gcc g++ <span class="token function">make</span></code></pre>
|
||
<p> </p>
|
||
<p>再通过以下命令安装SDL开发环境</p>
|
||
<pre><code class="fenced-code-block language-shell"><span class="token function">sudo</span> <span class="token function">apt</span> <span class="token function">install</span> libsdl2-dev</code></pre>
|
||
<p><code>Makefile</code></p>
|
||
<pre><code class="fenced-code-block language-makefile">LDLIBS <span class="token operator">+=</span> -lSDL2
|
||
|
||
<span class="token target symbol">main</span><span class="token punctuation">:</span> main.o <span class="token comment"># 源文件为main.cpp</span>
|
||
<span class="token variable">$</span><span class="token punctuation">(</span>CXX<span class="token punctuation">)</span> <span class="token variable">$^</span> -o <span class="token variable">$@</span> <span class="token variable">$</span><span class="token punctuation">(</span>LDFLAGS<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LDLIBS<span class="token punctuation">)</span>
|
||
|
||
<span class="token builtin-target builtin">.PHONY</span><span class="token punctuation">:</span> run clean
|
||
|
||
<span class="token target symbol">run</span><span class="token punctuation">:</span> main
|
||
./<span class="token variable">$<</span>
|
||
|
||
<span class="token target symbol">clean</span><span class="token punctuation">:</span>
|
||
<span class="token variable">$</span><span class="token punctuation">(</span>RM<span class="token punctuation">)</span> main *.o</code></pre>
|
||
<h3 class="atx" id="windows">Windows</h3>
|
||
<p><strong>SDL官网地址</strong>:<a href="http://www.libsdl.org/">http://www.libsdl.org/</a></p>
|
||
<p><strong>SDL GitHub地址</strong>:<a href="https://github.com/libsdl-org">https://github.com/libsdl-org</a></p>
|
||
<h4 class="atx" id="mingw">MinGW</h4>
|
||
<p><strong>编译器</strong> :MinGW(用的w64devkit包gcc/g++/make) </p>
|
||
<p> <a href="https://www.mingw-w64.org/">https://www.mingw-w64.org/</a></p>
|
||
<p> <a href="https://github.com/skeeto/w64devkit/releases">https://github.com/skeeto/w64devkit/releases</a></p>
|
||
<p><strong>代码编辑器</strong>: VSCode</p>
|
||
<p><strong>构建方式</strong>:手动写Makefile编译构建</p>
|
||
<p>所以下载的库为这个版本</p>
|
||
<p>解压到指定位置之后准备C语言文件main.c(测试用,先不用理解是啥)</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdlib.h></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><time.h></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">WIDTH</span> <span class="token expression"><span class="token number">1000</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">HEIGHT</span> <span class="token expression"><span class="token number">600</span></span></span>
|
||
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init Failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span>
|
||
<span class="token string">"TestWindow"</span><span class="token punctuation">,</span>
|
||
SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
WIDTH<span class="token punctuation">,</span> HEIGHT<span class="token punctuation">,</span>
|
||
SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Renderer <span class="token operator">*</span>renderer <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">srand</span><span class="token punctuation">(</span><span class="token function">time</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
Uint8 r <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
Uint8 g <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
Uint8 b <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
<span class="token class-name">int8_t</span> dx <span class="token operator">=</span> <span class="token number">8</span><span class="token punctuation">;</span>
|
||
<span class="token class-name">int8_t</span> dy <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> x <span class="token operator">=</span> rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> y <span class="token operator">=</span> rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>renderer<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
rect<span class="token punctuation">.</span>x <span class="token operator">+=</span> dx<span class="token punctuation">;</span>
|
||
x <span class="token operator">=</span> rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w <span class="token operator">>=</span> WIDTH <span class="token operator">||</span> rect<span class="token punctuation">.</span>x <span class="token operator"><=</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dx <span class="token operator">=</span> <span class="token operator">-</span>dx<span class="token punctuation">;</span>
|
||
rect<span class="token punctuation">.</span>y <span class="token operator">+=</span> dy<span class="token punctuation">;</span>
|
||
y <span class="token operator">=</span> rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h <span class="token operator">>=</span> HEIGHT <span class="token operator">||</span> rect<span class="token punctuation">.</span>y <span class="token operator"><=</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dy <span class="token operator">=</span> <span class="token operator">-</span>dy<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
r <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">256</span><span class="token punctuation">;</span>
|
||
g <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">256</span><span class="token punctuation">;</span>
|
||
b <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">256</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> rect<span class="token punctuation">.</span>x<span class="token punctuation">;</span> i <span class="token operator"><</span> rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> rect<span class="token punctuation">.</span>y<span class="token punctuation">;</span> j <span class="token operator"><</span> rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>i <span class="token operator">-</span> x<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span>i <span class="token operator">-</span> x<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>j <span class="token operator">-</span> y<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span>j <span class="token operator">-</span> y<span class="token punctuation">)</span> <span class="token operator">></span> rect<span class="token punctuation">.</span>w <span class="token operator">*</span> rect<span class="token punctuation">.</span>h <span class="token operator">/</span> <span class="token number">4</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_RenderDrawPoint</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> i<span class="token punctuation">,</span> j<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>renderer<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>renderer<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p>写如下Makefile</p>
|
||
<p><code>Windows版本Makefile</code></p>
|
||
<pre><code class="fenced-code-block language-makefile">CXXFLAGS <span class="token operator">+=</span> -ID<span class="token punctuation">:</span>/CPP/Libs/SDL2-2.26.5/<span class="token keyword">include</span> <span class="token comment">#改成你电脑上的include路径</span>
|
||
<span class="token comment"># CXXFLAGS += -fexec-charset=GBK -finput-charset=UTF-8</span>
|
||
LDFLAGS <span class="token operator">+=</span> -LD<span class="token punctuation">:</span>/CPP/Libs/SDL2-2.26.5/lib <span class="token comment"># 改成你电脑上的lib路径</span>
|
||
|
||
CXXFLAGS <span class="token operator">+=</span> -std<span class="token operator">=</span>c++23
|
||
<span class="token comment"># 如果不用特别新的C++特性,上面这行不用写</span>
|
||
LDLIBS <span class="token operator">+=</span> -lSDL2
|
||
|
||
LDLIBS <span class="token operator">+=</span> -mwindows <span class="token comment"># 用于去除运行时命令行窗口</span>
|
||
|
||
|
||
<span class="token target symbol">main.exe</span><span class="token punctuation">:</span> main.o
|
||
<span class="token variable">$</span><span class="token punctuation">(</span>CXX<span class="token punctuation">)</span> <span class="token variable">$^</span> -o <span class="token variable">$</span><span class="token punctuation">(</span><span class="token function">basename</span> <span class="token variable">$@</span><span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LDFLAGS<span class="token punctuation">)</span> <span class="token variable">$</span><span class="token punctuation">(</span>LDLIBS<span class="token punctuation">)</span>
|
||
|
||
<span class="token builtin-target builtin">.PHONY</span><span class="token punctuation">:</span> run clean
|
||
|
||
<span class="token target symbol">run</span><span class="token punctuation">:</span> main.exe
|
||
<span class="token variable">$<</span>
|
||
|
||
<span class="token target symbol">clean</span><span class="token punctuation">:</span>
|
||
<span class="token variable">$</span><span class="token punctuation">(</span>RM<span class="token punctuation">)</span> *.exe *.o</code></pre>
|
||
<p>完成之后用下列命令编译运行,正常即可</p>
|
||
<pre><code class="fenced-code-block language-shell"><span class="token function">make</span> run</code></pre>
|
||
<p> </p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h4 class="atx" id="visual-studio">Visual Studio</h4>
|
||
<p>如果是用其他IDE,则需要自行配置SDL的头文件和库文件引用位置。例如Visual Studio,则需要下载<code>SDL2-devel-2.28.2-VC.zip</code>这个版本的库文件,解压到指定位置后再进行配置。</p>
|
||
<p>新建一个Visual Studio的项目,添加main.c文件,内容如下:</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><stdlib.h></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><time.h></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">WIDTH</span> <span class="token expression"><span class="token number">1000</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">HEIGHT</span> <span class="token expression"><span class="token number">600</span></span></span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init Failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span>
|
||
<span class="token string">"TestWindow"</span><span class="token punctuation">,</span>
|
||
SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
WIDTH<span class="token punctuation">,</span> HEIGHT<span class="token punctuation">,</span>
|
||
SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Renderer <span class="token operator">*</span>renderer <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">srand</span><span class="token punctuation">(</span><span class="token function">time</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
Uint8 r <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
Uint8 g <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
Uint8 b <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
<span class="token class-name">int8_t</span> dx <span class="token operator">=</span> <span class="token number">8</span><span class="token punctuation">;</span>
|
||
<span class="token class-name">int8_t</span> dy <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> x <span class="token operator">=</span> rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> y <span class="token operator">=</span> rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>renderer<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
rect<span class="token punctuation">.</span>x <span class="token operator">+=</span> dx<span class="token punctuation">;</span>
|
||
x <span class="token operator">=</span> rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w <span class="token operator">>=</span> WIDTH <span class="token operator">||</span> rect<span class="token punctuation">.</span>x <span class="token operator"><=</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dx <span class="token operator">=</span> <span class="token operator">-</span>dx<span class="token punctuation">;</span>
|
||
rect<span class="token punctuation">.</span>y <span class="token operator">+=</span> dy<span class="token punctuation">;</span>
|
||
y <span class="token operator">=</span> rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h <span class="token operator">>=</span> HEIGHT <span class="token operator">||</span> rect<span class="token punctuation">.</span>y <span class="token operator"><=</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dy <span class="token operator">=</span> <span class="token operator">-</span>dy<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
r <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">256</span><span class="token punctuation">;</span>
|
||
g <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">256</span><span class="token punctuation">;</span>
|
||
b <span class="token operator">=</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">256</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> rect<span class="token punctuation">.</span>x<span class="token punctuation">;</span> i <span class="token operator"><</span> rect<span class="token punctuation">.</span>x <span class="token operator">+</span> rect<span class="token punctuation">.</span>w<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> j <span class="token operator">=</span> rect<span class="token punctuation">.</span>y<span class="token punctuation">;</span> j <span class="token operator"><</span> rect<span class="token punctuation">.</span>y <span class="token operator">+</span> rect<span class="token punctuation">.</span>h<span class="token punctuation">;</span> j<span class="token operator">++</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>i <span class="token operator">-</span> x<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span>i <span class="token operator">-</span> x<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>j <span class="token operator">-</span> y<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span>j <span class="token operator">-</span> y<span class="token punctuation">)</span> <span class="token operator">></span> rect<span class="token punctuation">.</span>w <span class="token operator">*</span> rect<span class="token punctuation">.</span>h <span class="token operator">/</span> <span class="token number">4</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_RenderDrawPoint</span><span class="token punctuation">(</span>renderer<span class="token punctuation">,</span> i<span class="token punctuation">,</span> j<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>renderer<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>renderer<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p>再配置静态库引用位置,头文件引用位置。最后编译运行测试,如果正常输出信息,则配置正确。其他IDE也是类似,配置好库文件、头文件即可。</p>
|
||
<p><strong>Visual Studio 2022配置SDL2开发环境</strong></p>
|
||
<ol>
|
||
<li><p>鼠标右键项目-->属性(Properties)打开属性配置面板)</p>
|
||
<p><img alt="" src="./img/vs_1.png"></p>
|
||
</li>
|
||
<li><p>路径配置:</p>
|
||
<p>配置(Configuration)选择所有配置(All Configuration),平台(Platform)选择x64(也可以选择Win32,需要与后续配置的库对应上)。点击VC++目录(VC++ Directories)分别配置包含目录(Include Directories)和库目录(Library Directories)</p>
|
||
<p><img alt="" src="./img/vs_2.png"></p>
|
||
<p>包含目录配置:将解压后的SDL中的include目录添加进来,点击确定(OK)。</p>
|
||
<p><img alt="" src="./img/vs_3.png"></p>
|
||
<p>库目录配置:将解压后的SDL中的lib\x64(如果选的平台是Win32则选x86)目录添加进来,点击确定(OK)。</p>
|
||
<p><img alt="" src="./img/vs_4.png"></p>
|
||
</li>
|
||
<li><p>链接库配置:点击链接器(Linker),编辑添加依赖项(Additional Dependencies)</p>
|
||
<p><img alt="" src="./img/vs_5.png"></p>
|
||
<p>输入SDL2.lib点击确定。</p>
|
||
<p><img alt="" src="./img/vs_6.png"></p>
|
||
</li>
|
||
</ol>
|
||
<h4 class="atx" id="windows上动态链接库找不到的解决办法">Windows上动态链接库找不到的解决办法</h4>
|
||
<ol>
|
||
<li><p>将SDL2.dll文件复制到C:\Windows\System32目录下</p>
|
||
</li>
|
||
<li><p>将SDL2.dll所在的目录添加到环境变量</p>
|
||
</li>
|
||
<li><p>将SDL2.dll复制到当前项目生成的.exe文件同级目录</p>
|
||
</li>
|
||
</ol>
|
||
<h1 class="atx" id="sdl基础应用示例">SDL基础应用示例</h1>
|
||
<h2 class="atx" id="sdl环境初始化与退出">SDL环境初始化与退出</h2>
|
||
<p>每次使用SDL都需要进行初始化,使用结束之后需要退出。用到的函数为</p>
|
||
<p><code>初始化与退出</code> </p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// 初始化</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_Init</span><span class="token punctuation">(</span>Uint32 flags<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 退出</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p>初始化成功则返回0,失败则返回一个负数。</p>
|
||
<p><code>flags</code>的取值见下表宏定义</p>
|
||
<p>例如</p>
|
||
<pre><code class="fenced-code-block language-c"></code></pre>
|
||
<p>使用SDL的C语言文件结构一般如下:</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main </span><span class="token comment">// 加上这句防止一些奇怪的报错</span></span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 一些操作</span>
|
||
<span class="token comment">// ....</span>
|
||
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="窗口显示">窗口显示</h2>
|
||
<p><code>窗口创建与销毁函数</code></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// 创建函数,成功则返回窗口指针,失败则返回NULL</span>
|
||
SDL_Window <span class="token operator">*</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>title<span class="token punctuation">,</span> <span class="token keyword">int</span> x<span class="token punctuation">,</span> <span class="token keyword">int</span> y<span class="token punctuation">,</span> <span class="token keyword">int</span> w<span class="token punctuation">,</span> <span class="token keyword">int</span> h<span class="token punctuation">,</span> Uint32 flags<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 销毁</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>SDL_Window <span class="token operator">*</span> window<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">title</td>
|
||
<td align="center">窗口标题,UTF-8编码</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">x</td>
|
||
<td align="center">窗口起始位置x坐标 通常为居中SDL_WINDOWPOS_CENTERED或未定义SDL_WINDOWPOS_UNDEFINED</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">y</td>
|
||
<td align="center">窗口起始位置y坐标 通常为居中SDL_WINDOWPOS_CENTERED或未定义SDL_WINDOWPOS_UNDEFINED</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">w</td>
|
||
<td align="center">窗口宽度</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">h</td>
|
||
<td align="center">窗口高度</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">flags</td>
|
||
<td align="center">窗口显示标志,可以是0,或者是多个其他标志组合</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">window</td>
|
||
<td align="center">由SDL_CreateWindow创建返回的窗口指针</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><code>flags</code>常用可取值(定义在SDL_video.h中),多个值时用<kbd>|</kbd>连接</p>
|
||
<pre><code class="fenced-code-block language-c"></code></pre>
|
||
<p><code>延迟(阻塞)函数</code></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token keyword">void</span> <span class="token function">SDL_Delay</span><span class="token punctuation">(</span>Uint32 ms<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p>让程序暂停指定的时间,单位为毫秒</p>
|
||
<p><strong>完整窗口显示示例</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main </span></span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span>
|
||
<span class="token string">"Hello SDL"</span><span class="token punctuation">,</span>
|
||
SDL_WINDOWPOS_UNDEFINED<span class="token punctuation">,</span> SDL_WINDOWPOS_UNDEFINED<span class="token punctuation">,</span>
|
||
<span class="token number">600</span><span class="token punctuation">,</span> <span class="token number">400</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">5000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="事件循环">事件循环</h2>
|
||
<p>直接用SDL_Delay阻塞程序的话无法响应事件,所以需要加入事件循环进行事件监听。通常做法是把事件循环单独写到一个函数当中,此时SDL程序结构如下:</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">WIDTH</span> <span class="token expression"><span class="token number">640</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">HEIGHT</span> <span class="token expression"><span class="token number">480</span></span></span>
|
||
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_AUDIO <span class="token operator">|</span> SDL_INIT_VIDEO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
SDL_Window <span class="token operator">*</span>window <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span>
|
||
<span class="token string">"SDLWindow"</span><span class="token punctuation">,</span>
|
||
SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
WIDTH<span class="token punctuation">,</span> HEIGHT<span class="token punctuation">,</span>
|
||
SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> window<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>window<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p><code>结构体SDL_Event</code></p>
|
||
<p>定义于文件 <em>SDL_Events.h</em>中,以下为一些常用成员,如需了解更多请到<em>SDL_Events.h</em>文件中查看</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token keyword">typedef</span> <span class="token keyword">union</span> SDL_Event
|
||
<span class="token punctuation">{</span>
|
||
Uint32 type<span class="token punctuation">;</span> <span class="token comment">// 事件类型,见下</span>
|
||
SDL_CommonEvent common<span class="token punctuation">;</span> <span class="token comment">/**< Common event data */</span>
|
||
SDL_DisplayEvent display<span class="token punctuation">;</span> <span class="token comment">/**< Display event data */</span>
|
||
SDL_WindowEvent window<span class="token punctuation">;</span> <span class="token comment">/**< Window event data */</span>
|
||
SDL_KeyboardEvent key<span class="token punctuation">;</span> <span class="token comment">/**< Keyboard event data */</span>
|
||
SDL_TextEditingEvent edit<span class="token punctuation">;</span> <span class="token comment">/**< Text editing event data */</span>
|
||
SDL_TextEditingExtEvent editExt<span class="token punctuation">;</span> <span class="token comment">/**< Extended text editing event data */</span>
|
||
SDL_TextInputEvent text<span class="token punctuation">;</span> <span class="token comment">/**< Text input event data */</span>
|
||
SDL_MouseMotionEvent motion<span class="token punctuation">;</span> <span class="token comment">/**< Mouse motion event data */</span>
|
||
SDL_MouseButtonEvent button<span class="token punctuation">;</span> <span class="token comment">/**< Mouse button event data */</span>
|
||
SDL_MouseWheelEvent wheel<span class="token punctuation">;</span> <span class="token comment">/**< Mouse wheel event data */</span>
|
||
|
||
SDL_AudioDeviceEvent adevice<span class="token punctuation">;</span> <span class="token comment">/**< Audio device event data */</span>
|
||
SDL_SensorEvent sensor<span class="token punctuation">;</span> <span class="token comment">/**< Sensor event data */</span>
|
||
SDL_QuitEvent quit<span class="token punctuation">;</span> <span class="token comment">/**< Quit request event data */</span>
|
||
SDL_UserEvent user<span class="token punctuation">;</span> <span class="token comment">/**< Custom event data */</span>
|
||
SDL_SysWMEvent syswm<span class="token punctuation">;</span> <span class="token comment">/**< System dependent window event data */</span>
|
||
SDL_TouchFingerEvent tfinger<span class="token punctuation">;</span> <span class="token comment">/**< Touch finger event data */</span>
|
||
SDL_MultiGestureEvent mgesture<span class="token punctuation">;</span> <span class="token comment">/**< Gesture event data */</span>
|
||
SDL_DollarGestureEvent dgesture<span class="token punctuation">;</span> <span class="token comment">/**< Gesture event data */</span>
|
||
SDL_DropEvent drop<span class="token punctuation">;</span> <span class="token comment">/**< Drag and drop event data */</span>
|
||
|
||
<span class="token comment">// ....更多内容请查阅SDL_Events.h文件</span>
|
||
|
||
<span class="token punctuation">}</span> SDL_Event<span class="token punctuation">;</span></code></pre>
|
||
<p><code>枚举类型SDL_EventType</code></p>
|
||
<p>事件类型,定义于文件 <em>SDL_Events.h</em>中,以下为一些常用成员,如需了解更多请查阅 <em>SDL_Events.h</em>文件</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token keyword">typedef</span> <span class="token keyword">enum</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_QUIT <span class="token operator">=</span> <span class="token number">0x100</span><span class="token punctuation">,</span> <span class="token comment">// 用户请求 退出</span>
|
||
|
||
<span class="token comment">/* 键盘事件 */</span>
|
||
SDL_KEYDOWN <span class="token operator">=</span> <span class="token number">0x300</span><span class="token punctuation">,</span> <span class="token comment">// 键盘按下</span>
|
||
SDL_KEYUP<span class="token punctuation">,</span> <span class="token comment">// 键盘弹起</span>
|
||
SDL_TEXTEDITING<span class="token punctuation">,</span> <span class="token comment">// </span>
|
||
SDL_TEXTINPUT<span class="token punctuation">,</span> <span class="token comment">// 文字输入</span>
|
||
|
||
|
||
<span class="token comment">/* 鼠标事件 */</span>
|
||
SDL_MOUSEMOTION <span class="token operator">=</span> <span class="token number">0x400</span><span class="token punctuation">,</span> <span class="token comment">// 鼠标运动</span>
|
||
SDL_MOUSEBUTTONDOWN<span class="token punctuation">,</span> <span class="token comment">// 鼠标键按下</span>
|
||
SDL_MOUSEBUTTONUP<span class="token punctuation">,</span> <span class="token comment">// 鼠标键松开</span>
|
||
SDL_MOUSEWHEEL<span class="token punctuation">,</span> <span class="token comment">// 鼠标滚轮滚动</span>
|
||
|
||
<span class="token comment">// .... 更多事件类型请到SDL_Events.h文件查看</span>
|
||
|
||
<span class="token punctuation">}</span> SDL_EventType<span class="token punctuation">;</span></code></pre>
|
||
<p><code>事件检测函数</code></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token keyword">int</span> <span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span>SDL_Event <span class="token operator">*</span> event<span class="token punctuation">)</span></code></pre>
|
||
<p>检测是否有等待处理的事件。如果队列中有事件,则把里面的第一个事件从事件队列中移除,保存到event这个指针中,并返回1。如果已经没有事件,则返回0。</p>
|
||
<p><code>event</code>用于接收事件队列中下一事件的指针,如果没有等待的事件则用NULL填充。</p>
|
||
<h2 class="atx" id="图形绘制">图形绘制</h2>
|
||
<p>在屏幕上绘制一个矩形需要用到如下三个函数</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// 获取与对应window关联的SDL surface,失败则返回NULL</span>
|
||
SDL_Surface <span class="token operator">*</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>SDL_Window <span class="token operator">*</span> window<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 在SDL surface上画一个矩形区域,成功返回0, 失败返回负数</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_FillRect</span><span class="token punctuation">(</span>SDL_Surface <span class="token operator">*</span> dst<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> rect<span class="token punctuation">,</span> Uint32 color<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 将surface的内容更新到屏幕上,成功返回0, 失败返回负数</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>SDL_Window <span class="token operator">*</span> window<span class="token punctuation">)</span></code></pre>
|
||
<p><strong>color</strong>为4个字节无符号整数,为4通道颜色值ARGB,其中第一个字节为Alpha通道,即透明度通道;R为红色分量通道;G为绿色分量通道;B为蓝色分量通道。通常用十六进制表示,例如0xff00aa8c。用这种方式绘制图形时,透明通道是不生效的,所以颜色值可以只写三个字节RGB分量,例如0xff00bb。</p>
|
||
<p>如果不习惯将颜色值写成一整个十六进制数值,可以将各个通道值分开写,则需要用到如下函数进行转换:</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// 将R,G, B三个通道分量转换为一个整数值。三个分量取值范围均为0~255</span>
|
||
Uint32 <span class="token function">SDL_MapRGB</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_PixelFormat <span class="token operator">*</span> format<span class="token punctuation">,</span> Uint8 r<span class="token punctuation">,</span> Uint8 g<span class="token punctuation">,</span> Uint8 b<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 将R, G, B, A四个通道分量转为一个整数值。四个分量取值范围均为0~255</span>
|
||
Uint32 SDLCALL <span class="token function">SDL_MapRGBA</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_PixelFormat <span class="token operator">*</span> format<span class="token punctuation">,</span>
|
||
Uint8 r<span class="token punctuation">,</span> Uint8 g<span class="token punctuation">,</span> Uint8 b<span class="token punctuation">,</span>
|
||
Uint8 a<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>SDL_PixelFormat</strong>由以下方式获得与释放</p>
|
||
<pre><code class="fenced-code-block language-c">SDL_PixelFormat <span class="token operator">*</span> format <span class="token operator">=</span> <span class="token function">SDL_AllocFormat</span><span class="token punctuation">(</span>SDL_PIXELFORMAT_BGRA32<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_FreeFormat</span><span class="token punctuation">(</span>format<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p> SDL_AllocFormat的参数为枚举类型SDL_PixelFormatEnum,定义在<em>SDL_pixels.h</em>里,常用的有:</p>
|
||
<ul>
|
||
<li>三通道:SDL_PIXELFORMAT_RGB24,SDL_PIXELFORMAT_BGR24</li>
|
||
<li>四通道:SDL_PIXELFORMAT_ARGB32,SDL_PIXELFORMAT_BGRA32</li>
|
||
</ul>
|
||
<p>小端存储的用BGR这个顺序的,大端存储的用RGB这个顺序的,如果无法判断用哪个,可每个顺序试一下看是否能达到想要的效果即可。</p>
|
||
<p>完整颜色转换示例:</p>
|
||
<pre><code class="fenced-code-block language-c">SDL_PixelFormat <span class="token operator">*</span> format <span class="token operator">=</span> <span class="token function">SDL_AllocFormat</span><span class="token punctuation">(</span>SDL_PIXELFORMAT_BGR24<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
Uint32 color <span class="token operator">=</span> <span class="token function">SDL_MapRGB</span><span class="token punctuation">(</span>format<span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">111</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeFormat</span><span class="token punctuation">(</span>format<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><code>SDL_Rect</code></p>
|
||
<p><strong>在屏幕上绘制矩形</strong></p>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">1200</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">800</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 在窗口上绘制一个矩形</span>
|
||
<span class="token comment">// 1. 获取与窗口关联的Surface</span>
|
||
SDL_Surface <span class="token operator">*</span>surf <span class="token operator">=</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_GetWindowSurface failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 2. 定义一个区域</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 3. 在Surface上进行绘制</span>
|
||
<span class="token comment">// SDL_FillRect(surf, &rect, SDL_MapRGB(surf->format, 0, 255, 0));</span>
|
||
<span class="token function">SDL_FillRect</span><span class="token punctuation">(</span>surf<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">,</span> <span class="token number">0x00ff00</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 4. 将绘制的内容更新到屏幕上</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_FillRect</span><span class="token punctuation">(</span>surf<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">,</span> <span class="token number">0x000000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
rect<span class="token punctuation">.</span>x <span class="token operator">+=</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FillRect</span><span class="token punctuation">(</span>surf<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">,</span> <span class="token number">0x00ff00</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 4. 释放Surface</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="图片显示">图片显示</h2>
|
||
<p>SDL核心库只支持BMP图片的操作。如需操作更多格式的图片,需要SDL2_image库,添加与使用方式与SDL核心库一样。头文件为#include <SDL2/SDL_image.h>,库文件为SDL2_image。这里为了简便不再引入SDL2_image库,直接使用BMP图片进行操作。</p>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">1200</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">800</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 显示BMP图片</span>
|
||
<span class="token comment">// 1. 获取与窗口关联的Surface</span>
|
||
SDL_Surface <span class="token operator">*</span>surf <span class="token operator">=</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_GetWindowSurface failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 2. 导入BMP图片</span>
|
||
SDL_Surface <span class="token operator">*</span>img_surf <span class="token operator">=</span> <span class="token function">SDL_LoadBMP</span><span class="token punctuation">(</span><span class="token string">"8.bmp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> img_surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_LoadBMP failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
|
||
<span class="token comment">// 3. 将图片Surface复制到窗口Surface上</span>
|
||
<span class="token function">SDL_BlitSurface</span><span class="token punctuation">(</span>img_surf<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> surf<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 4. 将绘制的内容更新到屏幕上</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 4. 释放Surface</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>img_surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="像素点操作">像素点操作</h2>
|
||
<p><strong>修改像素点的颜色值</strong></p>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">600</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">400</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 操作像素点</span>
|
||
<span class="token comment">// 1. 获取与窗口关联的Surface</span>
|
||
SDL_Surface <span class="token operator">*</span>surf <span class="token operator">=</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_GetWindowSurface failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 2. 修改像素点颜色值</span>
|
||
Uint32 <span class="token operator">*</span>px <span class="token operator">=</span> <span class="token punctuation">(</span>Uint32 <span class="token operator">*</span><span class="token punctuation">)</span>surf<span class="token operator">-></span>pixels<span class="token punctuation">;</span>
|
||
px<span class="token punctuation">[</span><span class="token number">20000</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token number">0xffffff</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 3. 将绘制的内容更新到屏幕上</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 4. 释放Surface</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p><strong>随机像素点显示照片</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><random></span></span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main </span></span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">tagARGB</span> <span class="token punctuation">{</span>
|
||
Uint8 b<span class="token punctuation">;</span>
|
||
Uint8 g<span class="token punctuation">;</span>
|
||
Uint8 r<span class="token punctuation">;</span>
|
||
Uint8 a<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span> ARGB<span class="token punctuation">;</span>
|
||
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">tagRGB</span> <span class="token punctuation">{</span>
|
||
Uint8 b<span class="token punctuation">;</span>
|
||
Uint8 g<span class="token punctuation">;</span>
|
||
Uint8 r<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span> RGB<span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">swap_value</span><span class="token punctuation">(</span>Uint32 <span class="token operator">*</span>ptr1<span class="token punctuation">,</span> Uint32 <span class="token operator">*</span>ptr2<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
Uint32 tmp <span class="token operator">=</span> <span class="token operator">*</span>ptr1<span class="token punctuation">;</span>
|
||
<span class="token operator">*</span>ptr1 <span class="token operator">=</span> <span class="token operator">*</span>ptr2<span class="token punctuation">;</span>
|
||
<span class="token operator">*</span>ptr2 <span class="token operator">=</span> tmp<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">shuffle_array</span><span class="token punctuation">(</span>Uint32 arr<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">,</span> Uint32 count<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
std<span class="token operator">::</span>random_device rdv<span class="token punctuation">;</span>
|
||
std<span class="token operator">::</span>default_random_engine <span class="token function">rdn</span><span class="token punctuation">(</span><span class="token function">rdv</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
std<span class="token operator">::</span>uniform_int_distribution<span class="token operator"><</span><span class="token operator">></span> <span class="token function">distrib</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
Uint32 j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span>Uint32 i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> count<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
j <span class="token operator">=</span> <span class="token function">distrib</span><span class="token punctuation">(</span>rdn<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator">!=</span> j<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">swap_value</span><span class="token punctuation">(</span><span class="token operator">&</span>arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token operator">&</span>arr<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Surface <span class="token operator">*</span>bmpimg <span class="token operator">=</span> <span class="token function">SDL_LoadBMP</span><span class="token punctuation">(</span><span class="token string">"1684826393041.bmp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span>
|
||
<span class="token string">"像素显示图片"</span><span class="token punctuation">,</span>
|
||
SDL_WINDOWPOS_UNDEFINED<span class="token punctuation">,</span> SDL_WINDOWPOS_UNDEFINED<span class="token punctuation">,</span>
|
||
bmpimg<span class="token operator">-></span>w<span class="token punctuation">,</span> bmpimg<span class="token operator">-></span>h<span class="token punctuation">,</span>
|
||
SDL_WINDOW_SHOWN <span class="token operator">|</span> SDL_WINDOW_RESIZABLE<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Surface <span class="token operator">*</span>surf <span class="token operator">=</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
ARGB <span class="token operator">*</span>px <span class="token operator">=</span> <span class="token punctuation">(</span>ARGB <span class="token operator">*</span><span class="token punctuation">)</span>surf<span class="token operator">-></span>pixels<span class="token punctuation">;</span>
|
||
|
||
Uint32 index <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
Uint32 max_num <span class="token operator">=</span> surf<span class="token operator">-></span>w <span class="token operator">*</span> surf<span class="token operator">-></span>h<span class="token punctuation">;</span>
|
||
Uint32 <span class="token operator">*</span>index_arr <span class="token operator">=</span> <span class="token punctuation">(</span>Uint32 <span class="token operator">*</span><span class="token punctuation">)</span><span class="token function">malloc</span><span class="token punctuation">(</span>max_num <span class="token operator">*</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span>Uint32<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span>Uint32 i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> max_num<span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> i<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">shuffle_array</span><span class="token punctuation">(</span>index_arr<span class="token punctuation">,</span> max_num<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> max_num <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">>=</span> <span class="token number">0</span><span class="token punctuation">;</span> i<span class="token operator">--</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
px<span class="token punctuation">[</span>index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span>a <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
px<span class="token punctuation">[</span>index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span>r <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>RGB <span class="token operator">*</span><span class="token punctuation">)</span>bmpimg<span class="token operator">-></span>pixels<span class="token punctuation">)</span><span class="token punctuation">[</span>index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span>r<span class="token punctuation">;</span>
|
||
px<span class="token punctuation">[</span>index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span>g <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>RGB <span class="token operator">*</span><span class="token punctuation">)</span>bmpimg<span class="token operator">-></span>pixels<span class="token punctuation">)</span><span class="token punctuation">[</span>index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span>g<span class="token punctuation">;</span>
|
||
px<span class="token punctuation">[</span>index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span>b <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>RGB <span class="token operator">*</span><span class="token punctuation">)</span>bmpimg<span class="token operator">-></span>pixels<span class="token punctuation">)</span><span class="token punctuation">[</span>index_arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">]</span><span class="token punctuation">.</span>b<span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>i <span class="token operator">%</span> <span class="token number">200</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
|
||
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">free</span><span class="token punctuation">(</span>index_arr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>bmpimg<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p><strong>绘制玫瑰</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><math.h></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
|
||
<span class="token comment">// 定义全局变量</span>
|
||
<span class="token keyword">int</span> rosesize <span class="token operator">=</span> <span class="token number">500</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> h <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">250</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 定义结构体</span>
|
||
<span class="token keyword">struct</span> <span class="token class-name">DOT</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">double</span> x<span class="token punctuation">;</span>
|
||
<span class="token keyword">double</span> y<span class="token punctuation">;</span>
|
||
<span class="token keyword">double</span> z<span class="token punctuation">;</span>
|
||
<span class="token keyword">double</span> r<span class="token punctuation">;</span> <span class="token comment">// 红色</span>
|
||
<span class="token keyword">double</span> g<span class="token punctuation">;</span> <span class="token comment">// 绿色</span>
|
||
<span class="token comment">// b(蓝色) 通过 r 计算</span>
|
||
<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
|
||
|
||
<span class="token comment">// 计算点</span>
|
||
bool <span class="token function">calc</span><span class="token punctuation">(</span><span class="token keyword">double</span> a<span class="token punctuation">,</span> <span class="token keyword">double</span> b<span class="token punctuation">,</span> <span class="token keyword">double</span> c<span class="token punctuation">,</span> DOT <span class="token operator">&</span>d<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">double</span> j<span class="token punctuation">,</span> n<span class="token punctuation">,</span> o<span class="token punctuation">,</span> w<span class="token punctuation">,</span> z<span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">if</span><span class="token punctuation">(</span>c <span class="token operator">></span> <span class="token number">60</span><span class="token punctuation">)</span> <span class="token comment">// 花柄</span>
|
||
<span class="token punctuation">{</span>
|
||
d<span class="token punctuation">.</span>x <span class="token operator">=</span> <span class="token function">sin</span><span class="token punctuation">(</span>a <span class="token operator">*</span> <span class="token number">7</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">13</span> <span class="token operator">+</span> <span class="token number">5</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">0.2</span> <span class="token operator">+</span> <span class="token function">pow</span><span class="token punctuation">(</span>b <span class="token operator">*</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token function">sin</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">50</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>y <span class="token operator">=</span> b <span class="token operator">*</span> rosesize <span class="token operator">+</span> <span class="token number">50</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>z <span class="token operator">=</span> <span class="token number">625</span> <span class="token operator">+</span> <span class="token function">cos</span><span class="token punctuation">(</span>a <span class="token operator">*</span> <span class="token number">7</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">13</span> <span class="token operator">+</span> <span class="token number">5</span> <span class="token operator">/</span> <span class="token punctuation">(</span><span class="token number">0.2</span> <span class="token operator">+</span> <span class="token function">pow</span><span class="token punctuation">(</span>b <span class="token operator">*</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">+</span> b <span class="token operator">*</span> <span class="token number">400</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>r <span class="token operator">=</span> a <span class="token operator">*</span> <span class="token number">1</span> <span class="token operator">-</span> b <span class="token operator">/</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>g <span class="token operator">=</span> a<span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> true<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">double</span> A <span class="token operator">=</span> a <span class="token operator">*</span> <span class="token number">2</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">double</span> B <span class="token operator">=</span> b <span class="token operator">*</span> <span class="token number">2</span> <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span><span class="token punctuation">(</span>A <span class="token operator">*</span> A <span class="token operator">+</span> B <span class="token operator">*</span> B <span class="token operator"><</span> <span class="token number">1</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span><span class="token punctuation">(</span>c <span class="token operator">></span> <span class="token number">37</span><span class="token punctuation">)</span> <span class="token comment">// 叶</span>
|
||
<span class="token punctuation">{</span>
|
||
j <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">int</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span> <span class="token operator">&</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
n <span class="token operator">=</span> j <span class="token operator">?</span> <span class="token number">6</span> <span class="token operator">:</span> <span class="token number">4</span><span class="token punctuation">;</span>
|
||
o <span class="token operator">=</span> <span class="token number">0.5</span> <span class="token operator">/</span> <span class="token punctuation">(</span>a <span class="token operator">+</span> <span class="token number">0.01</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">cos</span><span class="token punctuation">(</span>b <span class="token operator">*</span> <span class="token number">125</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">3</span> <span class="token operator">-</span> a <span class="token operator">*</span> <span class="token number">300</span><span class="token punctuation">;</span>
|
||
w <span class="token operator">=</span> b <span class="token operator">*</span> h<span class="token punctuation">;</span>
|
||
|
||
d<span class="token punctuation">.</span>x <span class="token operator">=</span> o <span class="token operator">*</span> <span class="token function">cos</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">+</span> w <span class="token operator">*</span> <span class="token function">sin</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">+</span> j <span class="token operator">*</span> <span class="token number">610</span> <span class="token operator">-</span> <span class="token number">390</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>y <span class="token operator">=</span> o <span class="token operator">*</span> <span class="token function">sin</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">-</span> w <span class="token operator">*</span> <span class="token function">cos</span><span class="token punctuation">(</span>n<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">550</span> <span class="token operator">-</span> j <span class="token operator">*</span> <span class="token number">350</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>z <span class="token operator">=</span> <span class="token number">1180</span> <span class="token operator">+</span> <span class="token function">cos</span><span class="token punctuation">(</span>B <span class="token operator">+</span> A<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">99</span> <span class="token operator">-</span> j <span class="token operator">*</span> <span class="token number">300</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>r <span class="token operator">=</span> <span class="token number">0.4</span> <span class="token operator">-</span> a <span class="token operator">*</span> <span class="token number">0.1</span> <span class="token operator">+</span> <span class="token function">pow</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> B <span class="token operator">*</span> B<span class="token punctuation">,</span> <span class="token operator">-</span>h <span class="token operator">*</span> <span class="token number">6</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.15</span> <span class="token operator">-</span> a <span class="token operator">*</span> b <span class="token operator">*</span> <span class="token number">0.4</span> <span class="token operator">+</span> <span class="token function">cos</span><span class="token punctuation">(</span>a <span class="token operator">+</span> b<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">5</span> <span class="token operator">+</span> <span class="token function">pow</span><span class="token punctuation">(</span><span class="token function">cos</span><span class="token punctuation">(</span><span class="token punctuation">(</span>o <span class="token operator">*</span> <span class="token punctuation">(</span>a <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>B <span class="token operator">></span> <span class="token number">0</span> <span class="token operator">?</span> w <span class="token operator">:</span> <span class="token operator">-</span>w<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">25</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">30</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.1</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> B <span class="token operator">*</span> B<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>g <span class="token operator">=</span> o <span class="token operator">/</span> <span class="token number">1000</span> <span class="token operator">+</span> <span class="token number">0.7</span> <span class="token operator">-</span> o <span class="token operator">*</span> w <span class="token operator">*</span> <span class="token number">0.000003</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> true<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span><span class="token punctuation">(</span>c <span class="token operator">></span> <span class="token number">32</span><span class="token punctuation">)</span> <span class="token comment">// 花萼</span>
|
||
<span class="token punctuation">{</span>
|
||
c <span class="token operator">=</span> c <span class="token operator">*</span> <span class="token number">1.16</span> <span class="token operator">-</span> <span class="token number">0.15</span><span class="token punctuation">;</span>
|
||
o <span class="token operator">=</span> a <span class="token operator">*</span> <span class="token number">45</span> <span class="token operator">-</span> <span class="token number">20</span><span class="token punctuation">;</span>
|
||
w <span class="token operator">=</span> b <span class="token operator">*</span> b <span class="token operator">*</span> h<span class="token punctuation">;</span>
|
||
z <span class="token operator">=</span> o <span class="token operator">*</span> <span class="token function">sin</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span> <span class="token operator">+</span> w <span class="token operator">*</span> <span class="token function">cos</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">620</span><span class="token punctuation">;</span>
|
||
|
||
d<span class="token punctuation">.</span>x <span class="token operator">=</span> o <span class="token operator">*</span> <span class="token function">cos</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span> <span class="token operator">-</span> w <span class="token operator">*</span> <span class="token function">sin</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>y <span class="token operator">=</span> <span class="token number">28</span> <span class="token operator">+</span> <span class="token function">cos</span><span class="token punctuation">(</span>B <span class="token operator">*</span> <span class="token number">0.5</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">99</span> <span class="token operator">-</span> b <span class="token operator">*</span> b <span class="token operator">*</span> b <span class="token operator">*</span> <span class="token number">60</span> <span class="token operator">-</span> z <span class="token operator">/</span> <span class="token number">2</span> <span class="token operator">-</span> h<span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>z <span class="token operator">=</span> z<span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>r <span class="token operator">=</span> <span class="token punctuation">(</span>b <span class="token operator">*</span> b <span class="token operator">*</span> <span class="token number">0.3</span> <span class="token operator">+</span> <span class="token function">pow</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> <span class="token punctuation">(</span>A <span class="token operator">*</span> A<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.15</span> <span class="token operator">+</span> <span class="token number">0.3</span><span class="token punctuation">)</span> <span class="token operator">*</span> b<span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>g <span class="token operator">=</span> b <span class="token operator">*</span> <span class="token number">0.7</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> true<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 花</span>
|
||
o <span class="token operator">=</span> A <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">2</span> <span class="token operator">-</span> b<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token number">80</span> <span class="token operator">-</span> c <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
w <span class="token operator">=</span> <span class="token number">99</span> <span class="token operator">-</span> <span class="token function">cos</span><span class="token punctuation">(</span>A<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">120</span> <span class="token operator">-</span> <span class="token function">cos</span><span class="token punctuation">(</span>b<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token punctuation">(</span><span class="token operator">-</span>h <span class="token operator">-</span> c <span class="token operator">*</span> <span class="token number">4.9</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">cos</span><span class="token punctuation">(</span><span class="token function">pow</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> b<span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">50</span> <span class="token operator">+</span> c <span class="token operator">*</span> <span class="token number">2</span><span class="token punctuation">;</span>
|
||
z <span class="token operator">=</span> o <span class="token operator">*</span> <span class="token function">sin</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span> <span class="token operator">+</span> w <span class="token operator">*</span> <span class="token function">cos</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token number">700</span><span class="token punctuation">;</span>
|
||
|
||
d<span class="token punctuation">.</span>x <span class="token operator">=</span> o <span class="token operator">*</span> <span class="token function">cos</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span> <span class="token operator">-</span> w <span class="token operator">*</span> <span class="token function">sin</span><span class="token punctuation">(</span>c<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>y <span class="token operator">=</span> B <span class="token operator">*</span> <span class="token number">99</span> <span class="token operator">-</span> <span class="token function">cos</span><span class="token punctuation">(</span><span class="token function">pow</span><span class="token punctuation">(</span>b<span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">50</span> <span class="token operator">-</span> c <span class="token operator">/</span> <span class="token number">3</span> <span class="token operator">-</span> z <span class="token operator">/</span> <span class="token number">1.35</span> <span class="token operator">+</span> <span class="token number">450</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>z <span class="token operator">=</span> z<span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>r <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> b <span class="token operator">/</span> <span class="token number">1.2</span><span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">0.9</span> <span class="token operator">+</span> a <span class="token operator">*</span> <span class="token number">0.1</span><span class="token punctuation">;</span>
|
||
d<span class="token punctuation">.</span>g <span class="token operator">=</span> <span class="token function">pow</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token number">1</span> <span class="token operator">-</span> b<span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">4</span> <span class="token operator">+</span> <span class="token number">0.05</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> true<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> false<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">short</span> <span class="token operator">*</span>zBuffer<span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> x<span class="token punctuation">,</span> y<span class="token punctuation">,</span> z<span class="token punctuation">,</span> zBufferIndex<span class="token punctuation">;</span>
|
||
DOT dot<span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init Failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span>
|
||
<span class="token string">"花花"</span><span class="token punctuation">,</span>
|
||
SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
<span class="token number">640</span><span class="token punctuation">,</span> <span class="token number">480</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Window create failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Surface <span class="token operator">*</span>win_surface <span class="token operator">=</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> win_surface<span class="token operator">-></span>w<span class="token punctuation">,</span> win_surface<span class="token operator">-></span>h<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FillRect</span><span class="token punctuation">(</span>win_surface<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">,</span> <span class="token number">0xffffffff</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 初始化 z-buffer</span>
|
||
zBuffer <span class="token operator">=</span> new <span class="token keyword">short</span><span class="token punctuation">[</span>rosesize <span class="token operator">*</span> rosesize<span class="token punctuation">]</span><span class="token punctuation">;</span>
|
||
<span class="token function">memset</span><span class="token punctuation">(</span>zBuffer<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token keyword">sizeof</span><span class="token punctuation">(</span><span class="token keyword">short</span><span class="token punctuation">)</span> <span class="token operator">*</span> rosesize <span class="token operator">*</span> rosesize<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">1000</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token function">calc</span><span class="token punctuation">(</span><span class="token keyword">double</span><span class="token punctuation">(</span><span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> RAND_MAX<span class="token punctuation">,</span> <span class="token keyword">double</span><span class="token punctuation">(</span><span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token operator">/</span> RAND_MAX<span class="token punctuation">,</span> <span class="token function">rand</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">%</span> <span class="token number">46</span> <span class="token operator">/</span> <span class="token number">0.74</span><span class="token punctuation">,</span> dot<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
z <span class="token operator">=</span> <span class="token keyword">int</span><span class="token punctuation">(</span>dot<span class="token punctuation">.</span>z <span class="token operator">+</span> <span class="token number">0.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
x <span class="token operator">=</span> <span class="token keyword">int</span><span class="token punctuation">(</span>dot<span class="token punctuation">.</span>x <span class="token operator">*</span> rosesize <span class="token operator">/</span> z <span class="token operator">-</span> h <span class="token operator">+</span> <span class="token number">0.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
y <span class="token operator">=</span> <span class="token keyword">int</span><span class="token punctuation">(</span>dot<span class="token punctuation">.</span>y <span class="token operator">*</span> rosesize <span class="token operator">/</span> z <span class="token operator">-</span> h <span class="token operator">+</span> <span class="token number">0.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>y <span class="token operator">>=</span> rosesize<span class="token punctuation">)</span> <span class="token keyword">continue</span><span class="token punctuation">;</span>
|
||
|
||
zBufferIndex <span class="token operator">=</span> y <span class="token operator">*</span> rosesize <span class="token operator">+</span> x<span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">if</span><span class="token punctuation">(</span><span class="token operator">!</span>zBuffer<span class="token punctuation">[</span>zBufferIndex<span class="token punctuation">]</span> <span class="token operator">||</span> zBuffer<span class="token punctuation">[</span>zBufferIndex<span class="token punctuation">]</span> <span class="token operator">></span> z<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
zBuffer<span class="token punctuation">[</span>zBufferIndex<span class="token punctuation">]</span> <span class="token operator">=</span> z<span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 画点</span>
|
||
<span class="token keyword">int</span> r <span class="token operator">=</span> <span class="token operator">~</span><span class="token keyword">int</span><span class="token punctuation">(</span><span class="token punctuation">(</span>dot<span class="token punctuation">.</span>r <span class="token operator">*</span> h<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>r <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span> r <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>r <span class="token operator">></span> <span class="token number">255</span><span class="token punctuation">)</span> r <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> g <span class="token operator">=</span> <span class="token operator">~</span><span class="token keyword">int</span><span class="token punctuation">(</span><span class="token punctuation">(</span>dot<span class="token punctuation">.</span>g <span class="token operator">*</span> h<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>g <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span> g <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>g <span class="token operator">></span> <span class="token number">255</span><span class="token punctuation">)</span> g <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> b <span class="token operator">=</span> <span class="token operator">~</span><span class="token keyword">int</span><span class="token punctuation">(</span><span class="token punctuation">(</span>dot<span class="token punctuation">.</span>r <span class="token operator">*</span> dot<span class="token punctuation">.</span>r <span class="token operator">*</span> <span class="token operator">-</span><span class="token number">80</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>b <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span> b <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>b <span class="token operator">></span> <span class="token number">255</span><span class="token punctuation">)</span> b <span class="token operator">=</span> <span class="token number">255</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> index <span class="token operator">=</span> <span class="token punctuation">(</span>x <span class="token operator">+</span> <span class="token number">50</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token punctuation">(</span>y <span class="token operator">-</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token operator">*</span> win_surface<span class="token operator">-></span>w<span class="token punctuation">;</span>
|
||
<span class="token punctuation">(</span><span class="token punctuation">(</span>Uint32 <span class="token operator">*</span><span class="token punctuation">)</span>win_surface<span class="token operator">-></span>pixels<span class="token punctuation">)</span><span class="token punctuation">[</span>index<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">SDL_MapRGB</span><span class="token punctuation">(</span>win_surface<span class="token operator">-></span>format<span class="token punctuation">,</span> r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
delete <span class="token punctuation">[</span><span class="token punctuation">]</span>zBuffer<span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>win_surface<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h2 class="atx" id="渲染">渲染</h2>
|
||
<h3 class="atx" id="渲染器创建与清屏">渲染器创建与清屏</h3>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">800</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">600</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器与清屏</span>
|
||
<span class="token comment">// 1. 创建渲染器</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 2. 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 3. 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 4. 渲染呈现 </span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 5. 销毁渲染器</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h3 class="atx" id="绘制点、线">绘制点、线</h3>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><deque></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">800</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">600</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器与清屏</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染点、线</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderDrawPoint</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">int</span> i <span class="token operator">=</span> <span class="token number">200</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token number">300</span><span class="token punctuation">;</span> i<span class="token operator">+=</span><span class="token number">5</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_RenderDrawPoint</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> i<span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_RenderDrawLine</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">250</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Point pt<span class="token punctuation">[</span><span class="token number">5</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">300</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token number">250</span><span class="token punctuation">,</span> <span class="token number">190</span><span class="token punctuation">}</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderDrawLines</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> pt<span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 练习:绘制一个19*19的围棋棋盘</span>
|
||
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 销毁渲染器</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h3 class="atx" id="绘制、填充矩形区域">绘制、填充矩形区域</h3>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">800</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">600</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器与清屏</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_SetRenderDrawBlendMode</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> SDL_BLENDMODE_BLEND<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染矩形</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// SDL_RenderDrawRect(rdr, &rect);</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 练习:思考一下如何实现贪吃蛇一条蛇移动的效果</span>
|
||
<span class="token comment">// 可以借助一下vector/deque等容器</span>
|
||
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token comment">// SDL_RenderClear(rdr);</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
rect<span class="token punctuation">.</span>x <span class="token operator">++</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// SDL_RenderDrawRect(rdr, &rect);</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 销毁渲染器</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h3 class="atx" id="图片渲染">图片渲染</h3>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">1369</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">768</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器与清屏</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染图片</span>
|
||
<span class="token comment">// 1. 导入图片</span>
|
||
SDL_Surface <span class="token operator">*</span>img_surf <span class="token operator">=</span> <span class="token function">SDL_LoadBMP</span><span class="token punctuation">(</span><span class="token string">"../SDL/img/2.bmp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1296*864</span>
|
||
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> img_surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_LoadBMP failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token function">SDL_SetWindowSize</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> img_surf<span class="token operator">-></span>w<span class="token punctuation">,</span> img_surf<span class="token operator">-></span>h<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 2. 创建Texture</span>
|
||
SDL_Texture <span class="token operator">*</span>texture <span class="token operator">=</span> <span class="token function">SDL_CreateTextureFromSurface</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> img_surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> texture<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateTextureFromSurface failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">648</span><span class="token punctuation">,</span> <span class="token number">432</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 3. 复制Texture</span>
|
||
<span class="token function">SDL_RenderCopy</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> texture<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 5. 销毁Texture</span>
|
||
<span class="token function">SDL_DestroyTexture</span><span class="token punctuation">(</span>texture<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>img_surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h3 class="atx" id="图片缩放、旋转">图片缩放、旋转</h3>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">1369</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">768</span></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器与清屏</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染图片</span>
|
||
<span class="token comment">// 1. 导入图片</span>
|
||
SDL_Surface <span class="token operator">*</span>img_surf <span class="token operator">=</span> <span class="token function">SDL_LoadBMP</span><span class="token punctuation">(</span><span class="token string">"../SDL/img/2.bmp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1296*864</span>
|
||
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> img_surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_LoadBMP failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token function">SDL_SetWindowSize</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> img_surf<span class="token operator">-></span>w<span class="token punctuation">,</span> img_surf<span class="token operator">-></span>h<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 2. 创建Texture</span>
|
||
SDL_Texture <span class="token operator">*</span>texture <span class="token operator">=</span> <span class="token function">SDL_CreateTextureFromSurface</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> img_surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> texture<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateTextureFromSurface failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">648</span><span class="token punctuation">,</span> <span class="token number">432</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
SDL_Point pt <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 3. 复制Texture</span>
|
||
<span class="token function">SDL_RenderCopyEx</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> texture<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">,</span> <span class="token number">90</span><span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> SDL_FLIP_NONE<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
|
||
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type <span class="token operator">==</span> SDL_QUIT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 5. 销毁Texture</span>
|
||
<span class="token function">SDL_DestroyTexture</span><span class="token punctuation">(</span>texture<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>img_surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="代码结构整理">代码结构整理</h2>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">720</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">640</span></span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="窗口事件">窗口事件</h2>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">720</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">640</span></span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_WINDOWEVENT<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>window<span class="token punctuation">.</span>event <span class="token operator">==</span> SDL_WINDOWEVENT_SIZE_CHANGED<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="鼠标事件">鼠标事件</h2>
|
||
<h3 class="atx" id="移动">移动</h3>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">720</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">640</span></span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_WINDOWEVENT<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>window<span class="token punctuation">.</span>event <span class="token operator">==</span> SDL_WINDOWEVENT_SIZE_CHANGED<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEMOTION<span class="token operator">:</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"x = %d, y = %d"</span><span class="token punctuation">,</span> event<span class="token punctuation">.</span>motion<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>motion<span class="token punctuation">.</span>y<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
rect<span class="token punctuation">.</span>x <span class="token operator">=</span> event<span class="token punctuation">.</span>motion<span class="token punctuation">.</span>x <span class="token operator">-</span> <span class="token number">100</span><span class="token punctuation">;</span>
|
||
rect<span class="token punctuation">.</span>y <span class="token operator">=</span> event<span class="token punctuation">.</span>motion<span class="token punctuation">.</span>y <span class="token operator">-</span> <span class="token number">50</span><span class="token punctuation">;</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h3 class="atx" id="按键">按键</h3>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">720</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">640</span></span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Point pt<span class="token punctuation">;</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_WINDOWEVENT<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>window<span class="token punctuation">.</span>event <span class="token operator">==</span> SDL_WINDOWEVENT_SIZE_CHANGED<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEMOTION<span class="token operator">:</span>
|
||
<span class="token comment">// SDL_Log("x = %d, y = %d", event.motion.x, event.motion.y);</span>
|
||
<span class="token comment">// rect.x = event.motion.x - 100;</span>
|
||
<span class="token comment">// rect.y = event.motion.y - 50;</span>
|
||
<span class="token comment">// draw();</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONDOWN<span class="token operator">:</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_MOUSEBUTTONDOWN x = %d, y = %d, button = %d, clicks = %d"</span><span class="token punctuation">,</span>
|
||
event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>button<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>clicks<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONUP<span class="token operator">:</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_MOUSEBUTTONUP x = %d, y = %d, button = %d, clicks = %d"</span><span class="token punctuation">,</span>
|
||
event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>button<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>clicks<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="键盘事件">键盘事件</h2>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">720</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">640</span></span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> dx <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Point pt<span class="token punctuation">;</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_WINDOWEVENT<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>window<span class="token punctuation">.</span>event <span class="token operator">==</span> SDL_WINDOWEVENT_SIZE_CHANGED<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEMOTION<span class="token operator">:</span>
|
||
<span class="token comment">// SDL_Log("x = %d, y = %d", event.motion.x, event.motion.y);</span>
|
||
<span class="token comment">// rect.x = event.motion.x - 100;</span>
|
||
<span class="token comment">// rect.y = event.motion.y - 50;</span>
|
||
<span class="token comment">// draw();</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONDOWN<span class="token operator">:</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_MOUSEBUTTONDOWN x = %d, y = %d, button = %d, clicks = %d"</span><span class="token punctuation">,</span>
|
||
event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>button<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>clicks<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONUP<span class="token operator">:</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_MOUSEBUTTONUP x = %d, y = %d, button = %d, clicks = %d"</span><span class="token punctuation">,</span>
|
||
event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>button<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>clicks<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_KEYDOWN<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_UP<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"UP"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_DOWN<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"DOWN"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_LEFT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"LEFT"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_RIGHT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"RIGHT"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_KEYUP<span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_TEXTEDITING<span class="token operator">:</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Edit %s"</span><span class="token punctuation">,</span> event<span class="token punctuation">.</span>edit<span class="token punctuation">.</span>text<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">case</span> SDL_TEXTINPUT<span class="token operator">:</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Input %s"</span><span class="token punctuation">,</span> event<span class="token punctuation">.</span>text<span class="token punctuation">.</span>text<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
rect<span class="token punctuation">.</span>x <span class="token operator">+=</span> dx<span class="token punctuation">;</span>
|
||
rect<span class="token punctuation">.</span>y <span class="token operator">+=</span> dy<span class="token punctuation">;</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="碰撞以及范围检测">碰撞以及范围检测</h2>
|
||
<h2 class="atx" id="播放声音">播放声音</h2>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">1027</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">761</span></span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> dx <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
|
||
Uint8 <span class="token operator">*</span>audio_buf<span class="token punctuation">;</span>
|
||
Uint32 audio_len<span class="token punctuation">;</span>
|
||
Uint32 audio_pos <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
SDL_AudioDeviceID device_id<span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
<span class="token function">SDL_CloseAudioDevice</span><span class="token punctuation">(</span>device_id<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeWAV</span><span class="token punctuation">(</span>audio_buf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Surface <span class="token operator">*</span>surf <span class="token operator">=</span> <span class="token function">SDL_LoadBMP</span><span class="token punctuation">(</span><span class="token string">"10.bmp"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
SDL_Texture <span class="token operator">*</span>texture <span class="token operator">=</span> <span class="token function">SDL_CreateTextureFromSurface</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderCopy</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> texture<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyTexture</span><span class="token punctuation">(</span>texture<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Point pt<span class="token punctuation">;</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_WINDOWEVENT<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>window<span class="token punctuation">.</span>event <span class="token operator">==</span> SDL_WINDOWEVENT_SIZE_CHANGED<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEMOTION<span class="token operator">:</span>
|
||
<span class="token comment">// SDL_Log("x = %d, y = %d", event.motion.x, event.motion.y);</span>
|
||
<span class="token comment">// rect.x = event.motion.x - 100;</span>
|
||
<span class="token comment">// rect.y = event.motion.y - 50;</span>
|
||
<span class="token comment">// draw();</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONDOWN<span class="token operator">:</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONUP<span class="token operator">:</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_KEYDOWN<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_UP<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dy <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_DOWN<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dy <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_LEFT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dx <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_RIGHT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dx <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_KEYUP<span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_TEXTEDITING<span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">case</span> SDL_TEXTINPUT<span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// draw();</span>
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">callback</span><span class="token punctuation">(</span><span class="token keyword">void</span> <span class="token operator">*</span>userdata<span class="token punctuation">,</span> Uint8 <span class="token operator">*</span> stream<span class="token punctuation">,</span> <span class="token keyword">int</span> len<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">int</span> remain <span class="token operator">=</span> audio_len <span class="token operator">-</span> audio_pos<span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>remain <span class="token operator">></span> len<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_memcpy</span><span class="token punctuation">(</span>stream<span class="token punctuation">,</span> audio_buf <span class="token operator">+</span> audio_pos<span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
audio_pos <span class="token operator">+=</span> len<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">else</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_memcpy</span><span class="token punctuation">(</span>stream<span class="token punctuation">,</span> audio_buf <span class="token operator">+</span> audio_pos<span class="token punctuation">,</span> remain<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
audio_pos <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">play_wav</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_AudioSpec audio_spec<span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token comment">// 1. 导入WAV文件</span>
|
||
<span class="token function">SDL_LoadWAV</span><span class="token punctuation">(</span><span class="token string">"1.wav"</span><span class="token punctuation">,</span> <span class="token operator">&</span>audio_spec<span class="token punctuation">,</span> <span class="token operator">&</span>audio_buf<span class="token punctuation">,</span> <span class="token operator">&</span>audio_len<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 2. 定义播放回调函数</span>
|
||
audio_spec<span class="token punctuation">.</span>userdata <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">void</span> <span class="token operator">*</span><span class="token punctuation">)</span><span class="token string">"这是外部传进来的数据"</span><span class="token punctuation">;</span>
|
||
audio_spec<span class="token punctuation">.</span>callback <span class="token operator">=</span> callback<span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 3. 打开音频设备</span>
|
||
device_id <span class="token operator">=</span> <span class="token function">SDL_OpenAudioDevice</span><span class="token punctuation">(</span><span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">&</span>audio_spec<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 4. 开始播放</span>
|
||
<span class="token function">SDL_PauseAudioDevice</span><span class="token punctuation">(</span>device_id<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 5. 释放资源 关闭设备</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">play_wav</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="动画帧率">动画帧率</h2>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">1280</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">720</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">FR</span> <span class="token expression"><span class="token number">25</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">FT</span> <span class="token expression"><span class="token number">1000</span> <span class="token operator">/</span> FR</span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> dx <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">int</span> index <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
|
||
Uint8 <span class="token operator">*</span>audio_buf<span class="token punctuation">;</span>
|
||
Uint32 audio_len<span class="token punctuation">;</span>
|
||
Uint32 audio_pos <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
SDL_AudioDeviceID device_id<span class="token punctuation">;</span>
|
||
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
<span class="token function">SDL_FreeWAV</span><span class="token punctuation">(</span>audio_buf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_CloseAudioDevice</span><span class="token punctuation">(</span>device_id<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 设置渲染颜色</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token comment">// 清除屏幕</span>
|
||
<span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">char</span> file<span class="token punctuation">[</span><span class="token number">20</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>index <span class="token operator">></span> <span class="token number">1736</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_snprintf</span><span class="token punctuation">(</span>file<span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">,</span> <span class="token string">"img/%d.bmp"</span><span class="token punctuation">,</span> index<span class="token operator">++</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
SDL_Surface <span class="token operator">*</span>surf <span class="token operator">=</span> <span class="token function">SDL_LoadBMP</span><span class="token punctuation">(</span>file<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
SDL_Texture <span class="token operator">*</span>texture <span class="token operator">=</span> <span class="token function">SDL_CreateTextureFromSurface</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderCopy</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> texture<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyTexture</span><span class="token punctuation">(</span>texture<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
Uint64 start<span class="token punctuation">,</span> end<span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> delay<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
start <span class="token operator">=</span> <span class="token function">SDL_GetTicks64</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Point pt<span class="token punctuation">;</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_WINDOWEVENT<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>window<span class="token punctuation">.</span>event <span class="token operator">==</span> SDL_WINDOWEVENT_SIZE_CHANGED<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEMOTION<span class="token operator">:</span>
|
||
<span class="token comment">// SDL_Log("x = %d, y = %d", event.motion.x, event.motion.y);</span>
|
||
<span class="token comment">// rect.x = event.motion.x - 100;</span>
|
||
<span class="token comment">// rect.y = event.motion.y - 50;</span>
|
||
<span class="token comment">// draw();</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONDOWN<span class="token operator">:</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">200</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_MOUSEBUTTONUP<span class="token operator">:</span>
|
||
pt <span class="token operator">=</span> <span class="token punctuation">{</span>event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>x<span class="token punctuation">,</span> event<span class="token punctuation">.</span>button<span class="token punctuation">.</span>y<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token operator">&</span>pt<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>rdr<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 渲染呈现</span>
|
||
<span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_KEYDOWN<span class="token operator">:</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_UP<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dy <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_DOWN<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dy <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
dx <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_LEFT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dx <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>key<span class="token punctuation">.</span>keysym<span class="token punctuation">.</span>sym <span class="token operator">==</span> SDLK_RIGHT<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
dx <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span>
|
||
dy <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_KEYUP<span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">case</span> SDL_TEXTEDITING<span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">case</span> SDL_TEXTINPUT<span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
end <span class="token operator">=</span> <span class="token function">SDL_GetTicks64</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
delay <span class="token operator">=</span> FT <span class="token operator">-</span> <span class="token punctuation">(</span>end <span class="token operator">-</span>start<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>delay <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span>delay<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">callback</span><span class="token punctuation">(</span><span class="token keyword">void</span> <span class="token operator">*</span>userdata<span class="token punctuation">,</span> Uint8 <span class="token operator">*</span> stream<span class="token punctuation">,</span> <span class="token keyword">int</span> len<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">int</span> remain <span class="token operator">=</span> audio_len <span class="token operator">-</span> audio_pos<span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>remain <span class="token operator">></span> len<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_memcpy</span><span class="token punctuation">(</span>stream<span class="token punctuation">,</span> audio_buf <span class="token operator">+</span> audio_pos<span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
audio_pos <span class="token operator">+=</span> len<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">else</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_memcpy</span><span class="token punctuation">(</span>stream<span class="token punctuation">,</span> audio_buf <span class="token operator">+</span> audio_pos<span class="token punctuation">,</span> remain<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
audio_pos <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">play_wav</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_AudioSpec audio_spec<span class="token punctuation">;</span>
|
||
<span class="token comment">// 1. 导入WAV文件</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_LoadWAV</span><span class="token punctuation">(</span><span class="token string">"2.wav"</span><span class="token punctuation">,</span> <span class="token operator">&</span>audio_spec<span class="token punctuation">,</span> <span class="token operator">&</span>audio_buf<span class="token punctuation">,</span> <span class="token operator">&</span>audio_len<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_LoadWAV failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 2. 定义播放回调函数</span>
|
||
audio_spec<span class="token punctuation">.</span>callback <span class="token operator">=</span> callback<span class="token punctuation">;</span>
|
||
|
||
audio_spec<span class="token punctuation">.</span>userdata <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token keyword">void</span> <span class="token operator">*</span><span class="token punctuation">)</span><span class="token string">"这是外部传进来的数据"</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 3. 打开音频设备</span>
|
||
device_id <span class="token operator">=</span> <span class="token function">SDL_OpenAudioDevice</span><span class="token punctuation">(</span><span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">&</span>audio_spec<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 4. 开始播放</span>
|
||
<span class="token function">SDL_PauseAudioDevice</span><span class="token punctuation">(</span>device_id<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 5. 释放资源 关闭设备</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">play_wav</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h2 class="atx" id="其他模块使用">其他模块使用</h2>
|
||
<p>其他模块的使用方式同核心模块一样,下载对应的库文件,将头文件、库文件合并到核心库的安装目录,在配置中添加对应的库即可。</p>
|
||
<pre><code class="fenced-code-block language-Makefile">CXXFLAGS += -IC:/Users/YAN/Desktop/SDL/lib/SDL2-devel-2.28.2-mingw/SDL2-2.28.2/x86_64-w64-mingw32/include #改成你电脑上的include路径
|
||
# CXXFLAGS += -fexec-charset=GBK -finput-charset=UTF-8
|
||
LDFLAGS += -LC:/Users/YAN/Desktop/SDL/lib/SDL2-devel-2.28.2-mingw/SDL2-2.28.2/x86_64-w64-mingw32/lib
|
||
|
||
CXXFLAGS += -std=c++23
|
||
|
||
LDLIBS += -lSDL2 -lSDL2_ttf # 链接库时加上对应的模块
|
||
|
||
LDLIBS += -mwindows
|
||
|
||
|
||
main.exe: main.o
|
||
$(CXX) $^ -o $(basename $@) $(LDFLAGS) $(LDLIBS)
|
||
|
||
.PHONY: run clean
|
||
|
||
run: main.exe
|
||
$<
|
||
|
||
clean:
|
||
$(RM) *.exe *.o</code></pre>
|
||
<p>文字模块示例</p>
|
||
<pre><code class="fenced-code-block language-cpp"><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL.h></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string"><SDL2/SDL_ttf.h></span></span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">W</span> <span class="token expression"><span class="token number">1280</span></span></span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">H</span> <span class="token expression"><span class="token number">720</span></span></span>
|
||
|
||
SDL_Window <span class="token operator">*</span>win <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
SDL_Renderer <span class="token operator">*</span>rdr <span class="token operator">=</span> <span class="token constant">NULL</span><span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">int</span> <span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
win <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token string">"Hello"</span><span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
W<span class="token punctuation">,</span> H<span class="token punctuation">,</span> SDL_WINDOW_RESIZABLE <span class="token operator">|</span> SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> win<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
<span class="token comment">// 创建渲染器</span>
|
||
rdr <span class="token operator">=</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>win<span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> rdr<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateRenderer failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 销毁</span>
|
||
<span class="token function">SDL_FreeWAV</span><span class="token punctuation">(</span>audio_buf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_CloseAudioDevice</span><span class="token punctuation">(</span>device_id<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>rdr<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Event event<span class="token punctuation">;</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">while</span> <span class="token punctuation">(</span><span class="token function">SDL_PollEvent</span><span class="token punctuation">(</span><span class="token operator">&</span>event<span class="token punctuation">)</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_Point pt<span class="token punctuation">;</span>
|
||
<span class="token keyword">switch</span> <span class="token punctuation">(</span>event<span class="token punctuation">.</span>type<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">case</span> SDL_QUIT<span class="token operator">:</span>
|
||
<span class="token keyword">return</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token keyword">default</span><span class="token operator">:</span>
|
||
<span class="token keyword">break</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">draw_text</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token comment">// 1. 初始化TTF</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">TTF_Init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"TTF_Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">TTF_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 2. 打开字体</span>
|
||
TTF_Font <span class="token operator">*</span>font <span class="token operator">=</span> <span class="token function">TTF_OpenFont</span><span class="token punctuation">(</span><span class="token string">"C:\\Windows\\Fonts\\simfang.ttf"</span><span class="token punctuation">,</span> <span class="token number">48</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>font<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"TTF_OpenFont failed: %s"</span><span class="token punctuation">,</span> <span class="token function">TTF_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 3. 渲染字体</span>
|
||
SDL_Surface <span class="token operator">*</span>txt_surf <span class="token operator">=</span> <span class="token function">TTF_RenderUTF8_LCD</span><span class="token punctuation">(</span>font<span class="token punctuation">,</span> <span class="token string">"你好Hello"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>txt_surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"TTF_RenderText_Solid failed: %s"</span><span class="token punctuation">,</span> <span class="token function">TTF_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 4. 获取与窗口关联的Surface</span>
|
||
SDL_Surface <span class="token operator">*</span>surf <span class="token operator">=</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>surf<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_GetWindowSurface failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token comment">// 5. 将字体Surface复制到窗口Surface上</span>
|
||
SDL_Rect rect <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token number">500</span><span class="token punctuation">,</span> <span class="token number">300</span><span class="token punctuation">,</span> txt_surf<span class="token operator">-></span>w<span class="token punctuation">,</span> txt_surf<span class="token operator">-></span>h<span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_BlitSurface</span><span class="token punctuation">(</span>txt_surf<span class="token punctuation">,</span> <span class="token constant">NULL</span><span class="token punctuation">,</span> surf<span class="token punctuation">,</span> <span class="token operator">&</span>rect<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 6. 更新窗口</span>
|
||
<span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>win<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token comment">// 7. 释放与销毁资源</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>txt_surf<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">TTF_CloseFont</span><span class="token punctuation">(</span>font<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token function">TTF_Quit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">undef</span> <span class="token expression">main</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">draw_text</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">event_loop</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">deinit</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p>关于文字渲染的几种类型:
|
||
<code>*_Solid</code>: 使用纯色填充,速度快,文字渲染质量不佳
|
||
<code>*_Shaded</code>: 使用纯色填充,添加一定阴影效果
|
||
<code>*_Blended</code>: 使用抗锯齿算法高质量渲染
|
||
<code>*_LCD</code>: 针对LCD显示器优化渲染</p>
|
||
<h2 class="atx" id="多线程操作">多线程操作</h2>
|
||
<h1 class="atx" id="sdl常用函数、结构体、枚举、宏定义">SDL常用函数、结构体、枚举、宏定义</h1>
|
||
<h2 class="atx" id="函数">函数</h2>
|
||
<h3 class="atx" id="sdl_init">SDL_Init</h3>
|
||
<p><strong>声明</strong> </p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_Init</span><span class="token punctuation">(</span>Uint32 flags<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>初始化SDL库(子系统)。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>接收参数为宏定义,见下表</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">flags取值</th>
|
||
<th align="center">初始化系统</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">SDL_INIT_VIDEO</td>
|
||
<td align="center">视频子系统,会自动初始化事件子系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">SDL_INIT_AUDIO</td>
|
||
<td align="center">音频子系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">SDL_INIT_TIMER</td>
|
||
<td align="center">定时器子系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">SDL_INIT_EVENTS</td>
|
||
<td align="center">事件子系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">SDL_INIT_JOYSTICK</td>
|
||
<td align="center">操纵杆子系统,自动初始化事件子系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">SDL_INIT_HAPTIC</td>
|
||
<td align="center">触觉子系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">SDL_INIT_GAMECONTROLLER</td>
|
||
<td align="center">控制子系统,自动初始化操纵杆子系统</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">SDL_INIT_EVERYTHING</td>
|
||
<td align="center">初始化所有子系统</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p>上述定义可以只初始化其中一个子系统,也可以多个一起初始化,多个时用<kbd>|</kbd>连接。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>初始化成功返回0,失败返回一个负数错误代码</p>
|
||
<p><strong>用法示例</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 只初始化视频子系统</span>
|
||
<span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_VIDEO <span class="token operator">|</span> SDL_INIT_AUDIO<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 初始化视频与音频子系统</span>
|
||
|
||
<span class="token comment">// 在初始化的同时进行是否成功判断</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_Init</span><span class="token punctuation">(</span>SDL_INIT_AUDIO <span class="token operator">|</span> SDL_INIT_VIDEO<span class="token punctuation">)</span> <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_Init failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_quit">SDL_Quit</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_Quit</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>清除(退出)所有已初始化的子系统。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_createwindow">SDL_CreateWindow</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_video.h</span>
|
||
SDL_Window <span class="token operator">*</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>title<span class="token punctuation">,</span> <span class="token keyword">int</span> x<span class="token punctuation">,</span> <span class="token keyword">int</span> y<span class="token punctuation">,</span> <span class="token keyword">int</span> w<span class="token punctuation">,</span><span class="token keyword">int</span> h<span class="token punctuation">,</span> Uint32 flags<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">title</td>
|
||
<td align="center">窗口标题,UTF-8编码</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">x</td>
|
||
<td align="center">窗口起始位置x坐标 通常为居中<font color="blue">SDL_WINDOWPOS_CENTERED</font>或未定义<font color="blue">SDL_WINDOWPOS_UNDEFINED</font></td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">y</td>
|
||
<td align="center">窗口起始位置y坐标 通常为居中<font color="blue">SDL_WINDOWPOS_CENTERED</font>或未定义<font color="blue">SDL_WINDOWPOS_UNDEFINED</font></td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">w</td>
|
||
<td align="center">窗口宽度</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">h</td>
|
||
<td align="center">窗口高度</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">flags</td>
|
||
<td align="center">窗口显示标志,可以是0,或者是枚举类型SDL_WindowFlags中多个标志组合</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><code>flags</code>可取值为枚举类型SDL_WindowFlags(定义在SDL_video.h中),多个值时用<kbd>|</kbd>连接,一些常用值如下</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token keyword">typedef</span> <span class="token keyword">enum</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_WINDOW_FULLSCREEN <span class="token operator">=</span> <span class="token number">0x00000001</span><span class="token punctuation">,</span> <span class="token comment">// 全屏显示</span>
|
||
SDL_WINDOW_OPENGL <span class="token operator">=</span> <span class="token number">0x00000002</span><span class="token punctuation">,</span> <span class="token comment">// 使用OpenGL</span>
|
||
SDL_WINDOW_SHOWN <span class="token operator">=</span> <span class="token number">0x00000004</span><span class="token punctuation">,</span> <span class="token comment">// 显示窗口</span>
|
||
SDL_WINDOW_HIDDEN <span class="token operator">=</span> <span class="token number">0x00000008</span><span class="token punctuation">,</span> <span class="token comment">// 隐藏窗口</span>
|
||
SDL_WINDOW_BORDERLESS <span class="token operator">=</span> <span class="token number">0x00000010</span><span class="token punctuation">,</span> <span class="token comment">// 窗口无边框</span>
|
||
SDL_WINDOW_RESIZABLE <span class="token operator">=</span> <span class="token number">0x00000020</span><span class="token punctuation">,</span> <span class="token comment">// 窗口大小可变</span>
|
||
SDL_WINDOW_MINIMIZED <span class="token operator">=</span> <span class="token number">0x00000040</span><span class="token punctuation">,</span> <span class="token comment">// 窗口最大化</span>
|
||
SDL_WINDOW_MAXIMIZED <span class="token operator">=</span> <span class="token number">0x00000080</span><span class="token punctuation">,</span> <span class="token comment">// 窗口最小化</span>
|
||
SDL_WINDOW_MOUSE_GRABBED <span class="token operator">=</span> <span class="token number">0x00000100</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_INPUT_FOCUS <span class="token operator">=</span> <span class="token number">0x00000200</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_MOUSE_FOCUS <span class="token operator">=</span> <span class="token number">0x00000400</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_FULLSCREEN_DESKTOP <span class="token operator">=</span> <span class="token punctuation">(</span> SDL_WINDOW_FULLSCREEN <span class="token operator">|</span> <span class="token number">0x00001000</span> <span class="token punctuation">)</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_FOREIGN <span class="token operator">=</span> <span class="token number">0x00000800</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_ALLOW_HIGHDPI <span class="token operator">=</span> <span class="token number">0x00002000</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_MOUSE_CAPTURE <span class="token operator">=</span> <span class="token number">0x00004000</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_ALWAYS_ON_TOP <span class="token operator">=</span> <span class="token number">0x00008000</span><span class="token punctuation">,</span> <span class="token comment">// 窗口保持在最顶层</span>
|
||
SDL_WINDOW_SKIP_TASKBAR <span class="token operator">=</span> <span class="token number">0x00010000</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_UTILITY <span class="token operator">=</span> <span class="token number">0x00020000</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_TOOLTIP <span class="token operator">=</span> <span class="token number">0x00040000</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_POPUP_MENU <span class="token operator">=</span> <span class="token number">0x00080000</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_KEYBOARD_GRABBED <span class="token operator">=</span> <span class="token number">0x00100000</span><span class="token punctuation">,</span> <span class="token comment">//</span>
|
||
SDL_WINDOW_VULKAN <span class="token operator">=</span> <span class="token number">0x10000000</span><span class="token punctuation">,</span>
|
||
SDL_WINDOW_METAL <span class="token operator">=</span> <span class="token number">0x20000000</span><span class="token punctuation">,</span>
|
||
|
||
SDL_WINDOW_INPUT_GRABBED <span class="token operator">=</span> SDL_WINDOW_MOUSE_GRABBED
|
||
<span class="token punctuation">}</span> SDL_WindowFlags<span class="token punctuation">;</span></code></pre>
|
||
<p><strong>返回值</strong></p>
|
||
<p>窗口创建成功则返回对应窗口指针,失败则返回NULL。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_destroywindow">SDL_DestroyWindow</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_video.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>SDL_Window <span class="token operator">*</span> window<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>销毁由SDL_CreateWindow创建的窗口。</p>
|
||
<p><strong>用法示例</strong></p>
|
||
<pre><code class="fenced-code-block language-c">SDL_Window <span class="token operator">*</span>window <span class="token operator">=</span> <span class="token function">SDL_CreateWindow</span><span class="token punctuation">(</span>
|
||
<span class="token string">"SDLWindow"</span><span class="token punctuation">,</span>
|
||
SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span> SDL_WINDOWPOS_CENTERED<span class="token punctuation">,</span>
|
||
WIDTH<span class="token punctuation">,</span> HEIGHT<span class="token punctuation">,</span>
|
||
SDL_WINDOW_SHOWN<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token constant">NULL</span> <span class="token operator">==</span> window<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"SDL_CreateWindow failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token function">SDL_Delay</span><span class="token punctuation">(</span><span class="token number">5000</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_DestroyWindow</span><span class="token punctuation">(</span>window<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_delay">SDL_Delay</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_timer.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_Delay</span><span class="token punctuation">(</span>Uint32 ms<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>让程序暂停(阻塞)指定时间,单位为毫秒。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_log">SDL_Log</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_log.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>fmt<span class="token punctuation">,</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">)</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>向控制台输出信息,用法与C语言中printf一样。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_geterror">SDL_GetError</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_error.h</span>
|
||
<span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token keyword">void</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>获取最后一次发生错误对应的错误信息。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_getwindowsurface">SDL_GetWindowSurface</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_video.h</span>
|
||
SDL_Surface <span class="token operator">*</span> <span class="token function">SDL_GetWindowSurface</span><span class="token punctuation">(</span>SDL_Window <span class="token operator">*</span> window<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>获取与window关联的SDL_Surface指针。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>成功则返回<a href="#sdlsurface">SDL_Surface</a>指针,失败则返回NULL。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_freesurface">SDL_FreeSurface</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_surface.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_FreeSurface</span><span class="token punctuation">(</span>SDL_Surface <span class="token operator">*</span> surface<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>释放SDL_Surface指针。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_fillrect">SDL_FillRect</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_surface.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_FillRect</span><span class="token punctuation">(</span>SDL_Surface <span class="token operator">*</span> dst<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> rect<span class="token punctuation">,</span> Uint32 color<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>在指定的surface上绘制(填充)一个指定区域的矩形。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">dst</td>
|
||
<td align="center">需要在上面进行绘制的surface指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">rect</td>
|
||
<td align="center">需要绘制的区域</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">color</td>
|
||
<td align="center">4字节无符号整型,表示颜色,通常用十六进制表示,例如0xFF32BACD。每两个字符表示一个通道,分别人ARGB通道。但在本函数中透明通道A不会生效,所以可以只写RGB三个字节,即0x32BACD</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p>区域结构体见<a href="#sdlrect">SDL_Rect</a></p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>填充成功返回0,失败返回负数错误代码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_updatewindowsurface">SDL_UpdateWindowSurface</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_video.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_UpdateWindowSurface</span><span class="token punctuation">(</span>SDL_Window <span class="token operator">*</span> window<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>将Surface的数据更新到屏幕上</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>更新成功返回0,失败返回负数错误代码</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_maprgb">SDL_MapRGB</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_pixels.h</span>
|
||
Uint32 <span class="token function">SDL_MapRGB</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_PixelFormat <span class="token operator">*</span> format<span class="token punctuation">,</span>Uint8 r<span class="token punctuation">,</span> Uint8 g<span class="token punctuation">,</span> Uint8 b<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>使用指定的像素格式将r, g, b三个通道的颜色分量转为一个颜色值。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">format</td>
|
||
<td align="center">描述像素格式的结构体</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">r</td>
|
||
<td align="center">红色通道分量值,0~255</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">g</td>
|
||
<td align="center">绿色通道分量值, 0~255</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">b</td>
|
||
<td align="center">蓝色通道分量值, 0~255</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>由三个分量合并成的像素颜色值。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_maprgba">SDL_MapRGBA</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_pixels.h</span>
|
||
Uint32 <span class="token function">SDL_MapRGBA</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_PixelFormat <span class="token operator">*</span> format<span class="token punctuation">,</span>Uint8 r<span class="token punctuation">,</span> Uint8 g<span class="token punctuation">,</span> Uint8 b<span class="token punctuation">,</span> Uint8 a<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>使用指定的像素格式将r, g, b, a 四个通道的颜色分量转为一个颜色值。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">format</td>
|
||
<td align="center">描述像素格式的结构体</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">r</td>
|
||
<td align="center">红色通道分量值,0~255</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">g</td>
|
||
<td align="center">绿色通道分量值, 0~255</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">b</td>
|
||
<td align="center">蓝色通道分量值, 0~255</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">a</td>
|
||
<td align="center">透明通道分量值, 0~255</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>由三个分量合并成的像素颜色值。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_loadbmp">SDL_LoadBMP</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_surface.h</span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name function">SDL_LoadBMP</span><span class="token expression"><span class="token punctuation">(</span>file<span class="token punctuation">)</span> <span class="token function">SDL_LoadBMP_RW</span><span class="token punctuation">(</span><span class="token function">SDL_RWFromFile</span><span class="token punctuation">(</span>file<span class="token punctuation">,</span> </span><span class="token string">"rb"</span><span class="token expression"><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span></span></span>
|
||
<span class="token comment">// SDL_LoadBMP的声明是一个宏定义,其效果等同于下面的写法</span>
|
||
SDL_Surface <span class="token operator">*</span> <span class="token function">SDL_LoadBMP_RW</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span> file<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>导入BMP图片数据。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>file: 文件名</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>导入成功返回一个指向<a href="#sdlsurface">SDL_Surface</a>的指针,导入失败则返回NULL。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_blitsurface">SDL_BlitSurface</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_surface.h</span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SDL_BlitSurface</span> <span class="token expression">SDL_UpperBlit</span></span>
|
||
|
||
<span class="token keyword">int</span> <span class="token function">SDL_UpperBlit</span><span class="token punctuation">(</span>SDL_Surface <span class="token operator">*</span> src<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> srcrect<span class="token punctuation">,</span>SDL_Surface <span class="token operator">*</span> dst<span class="token punctuation">,</span> SDL_Rect <span class="token operator">*</span> dstrect<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>将一个surface的内容复制到另一个surface当中。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">src</td>
|
||
<td align="center">源surface</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">srcrect</td>
|
||
<td align="center">源surface需要复制的区域</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">dst</td>
|
||
<td align="center">目标surface</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">dstrect</td>
|
||
<td align="center">目标surface的区域(不生效)</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>复制成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_blitscaled">SDL_BlitScaled</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_surface.h</span>
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name">SDL_BlitScaled</span> <span class="token expression">SDL_UpperBlitScaled</span></span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_UpperBlitScaled</span><span class="token punctuation">(</span>SDL_Surface <span class="token operator">*</span> src<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> srcrect<span class="token punctuation">,</span>SDL_Surface <span class="token operator">*</span> dst<span class="token punctuation">,</span> SDL_Rect <span class="token operator">*</span> dstrect<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>将一个surface的内容复制到另一个surface当中。两个区域大小不一致时,进行缩放。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">src</td>
|
||
<td align="center">源surface</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">srcrect</td>
|
||
<td align="center">源surface需要复制的区域</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">dst</td>
|
||
<td align="center">目标surface</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">dstrect</td>
|
||
<td align="center">目标surface的区域</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>复制成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_creatergbsurface">SDL_CreateRGBSurface</h3>
|
||
<h3 class="atx" id="sdl_creatergbsurfacewithformat">SDL_CreateRGBSurfaceWithFormat</h3>
|
||
<h3 class="atx" id="sdl_creatergbsurfacefrom">SDL_CreateRGBSurfaceFrom</h3>
|
||
<h3 class="atx" id="sdl_creatergbsurfacewithformatfrom">SDL_CreateRGBSurfaceWithFormatFrom</h3>
|
||
<h3 class="atx" id="sdl_locksurface">SDL_LockSurface</h3>
|
||
<h3 class="atx" id="sdl_unlocksurface">SDL_UnlockSurface</h3>
|
||
<h3 class="atx" id="sdl_createrenderer">SDL_CreateRenderer</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
SDL_Renderer <span class="token operator">*</span> <span class="token function">SDL_CreateRenderer</span><span class="token punctuation">(</span>SDL_Window <span class="token operator">*</span> window<span class="token punctuation">,</span><span class="token keyword">int</span> index<span class="token punctuation">,</span> Uint32 flags<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>给指定窗口创建一个2D渲染环境。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">window</td>
|
||
<td align="center">需要创建渲染环境的窗口指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">index</td>
|
||
<td align="center">初始化渲染驱动索引。通常为-1,表示自动初始化第一个支持的驱动</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">flags</td>
|
||
<td align="center">0或者SDL_RendererFlags一个或多个值的组合</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><code>SDL_RendererFlags</code>为枚举类型,多个值时用<kbd>|</kbd>连接。如下</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">typedef</span> <span class="token keyword">enum</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_RENDERER_SOFTWARE <span class="token operator">=</span> <span class="token number">0x00000001</span><span class="token punctuation">,</span> <span class="token comment">// 软件(CPU)渲染</span>
|
||
SDL_RENDERER_ACCELERATED <span class="token operator">=</span> <span class="token number">0x00000002</span><span class="token punctuation">,</span> <span class="token comment">// 硬件加速</span>
|
||
SDL_RENDERER_PRESENTVSYNC <span class="token operator">=</span> <span class="token number">0x00000004</span><span class="token punctuation">,</span>
|
||
SDL_RENDERER_TARGETTEXTURE <span class="token operator">=</span> <span class="token number">0x00000008</span>
|
||
<span class="token punctuation">}</span> SDL_RendererFlags<span class="token punctuation">;</span></code></pre>
|
||
<p><strong>返回值</strong></p>
|
||
<p>成功返回渲染器指针,失败返回NULL。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_destroyrenderer">SDL_DestroyRenderer</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_DestroyRenderer</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>销毁渲染环境并释放关联的texture</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_setrenderdrawcolor">SDL_SetRenderDrawColor</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_SetRenderDrawColor</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span>Uint8 r<span class="token punctuation">,</span> Uint8 g<span class="token punctuation">,</span> Uint8 b<span class="token punctuation">,</span>Uint8 a<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>设置绘制操作(绘制/填充矩形、线条、点以及清除屏幕)的颜色。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">render</td>
|
||
<td align="center">渲染器</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">r</td>
|
||
<td align="center">红色通道值</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">g</td>
|
||
<td align="center">绿色通道值</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">b</td>
|
||
<td align="center">蓝色通道值</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">a</td>
|
||
<td align="center">透明通道值</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>设置成功返回0,失败返回负数错误代码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderclear">SDL_RenderClear</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderClear</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>利用<a href="#sdlsetrenderdrawcolor">SDL_SetRenderDrawColor</a>设置的颜色清除当前渲染目标。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>清除成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderpresent">SDL_RenderPresent</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_RenderPresent</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>将渲染操作的数据更新到屏幕上。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_setrenderdrawblendmode">SDL_SetRenderDrawBlendMode</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_SetRenderDrawBlendMode</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span>SDL_BlendMode blendMode<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>为绘制操作设置颜色混合模式。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>混合模式为枚举类型SDL_BlendMode,定义及常用值如下:</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_blendmode.h</span>
|
||
|
||
<span class="token keyword">typedef</span> <span class="token keyword">enum</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_BLENDMODE_NONE <span class="token operator">=</span> <span class="token number">0x00000000</span><span class="token punctuation">,</span> <span class="token comment">// 默认模式。无混合,透明通道不生效</span>
|
||
SDL_BLENDMODE_BLEND <span class="token operator">=</span> <span class="token number">0x00000001</span><span class="token punctuation">,</span> <span class="token comment">// Alpha通道混合,透明通道生效</span>
|
||
|
||
<span class="token comment">// 下面这些混合模式暂时不用管, 有兴趣可以自行研究一下</span>
|
||
SDL_BLENDMODE_ADD <span class="token operator">=</span> <span class="token number">0x00000002</span><span class="token punctuation">,</span>
|
||
SDL_BLENDMODE_MOD <span class="token operator">=</span> <span class="token number">0x00000004</span><span class="token punctuation">,</span>
|
||
SDL_BLENDMODE_MUL <span class="token operator">=</span> <span class="token number">0x00000008</span><span class="token punctuation">,</span>
|
||
SDL_BLENDMODE_INVALID <span class="token operator">=</span> <span class="token number">0x7FFFFFFF</span>
|
||
<span class="token punctuation">}</span> SDL_BlendMode<span class="token punctuation">;</span></code></pre>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderdrawpoint">SDL_RenderDrawPoint</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderDrawPoint</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span><span class="token keyword">int</span> x<span class="token punctuation">,</span> <span class="token keyword">int</span> y<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>根据提供的坐标在当前渲染目标上绘制一个点。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>绘制成功返回0,失败返回负值错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderdrawpoints">SDL_RenderDrawPoints</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderDrawPoints</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span><span class="token keyword">const</span> SDL_Point <span class="token operator">*</span> points<span class="token punctuation">,</span><span class="token keyword">int</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>在当前渲染环境上绘制多个点。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">renderer</td>
|
||
<td align="center">当前渲染器指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">points</td>
|
||
<td align="center">指向一个<a href="#sdlpoint">SDL_Point</a>数组的指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">count</td>
|
||
<td align="center">点的数量</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>绘制成功则返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderdrawline">SDL_RenderDrawLine</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderDrawLine</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span><span class="token keyword">int</span> x1<span class="token punctuation">,</span> <span class="token keyword">int</span> y1<span class="token punctuation">,</span> <span class="token keyword">int</span> x2<span class="token punctuation">,</span> <span class="token keyword">int</span> y2<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>根据提供的两个点的坐标在当前渲染环境上绘制一条线。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>绘制成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderdrawlines">SDL_RenderDrawLines</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> SDLCALL <span class="token function">SDL_RenderDrawLines</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span><span class="token keyword">const</span> SDL_Point <span class="token operator">*</span> points<span class="token punctuation">,</span><span class="token keyword">int</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>沿着提供的多个点绘制线段。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>见<a href="#sdlrenderdrawpoints">SDL_RenderDrawPoints</a>参数。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>绘制成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderdrawrect">SDL_RenderDrawRect</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderDrawRect</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> rect<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>在当前渲染目标上指定区域绘制一个矩形。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>绘制成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderdrawrects">SDL_RenderDrawRects</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderDrawRects</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> rects<span class="token punctuation">,</span> <span class="token keyword">int</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>根据提供的区域数组在当前渲染目标上绘制多个矩形。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">renderer</td>
|
||
<td align="center">渲染器指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">rects</td>
|
||
<td align="center">指向<a href="#sdlrect">SDL_Rect</a>数组的指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">count</td>
|
||
<td align="center">区域数量</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>绘制成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderfillrect">SDL_RenderFillRect</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderFillRect</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> rect<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>在当前渲染目标上指定区域填充一个矩形。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>填充成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_renderfillrects">SDL_RenderFillRects</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderFillRects</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> rects<span class="token punctuation">,</span> <span class="token keyword">int</span> count<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>根据提供的区域数组在当前渲染目标上填充多个矩形。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">renderer</td>
|
||
<td align="center">渲染器指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">rects</td>
|
||
<td align="center">指向<a href="#sdlrect">SDL_Rect</a>数组的指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">count</td>
|
||
<td align="center">区域数量</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>填充成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_rendersetscale">SDL_RenderSetScale</h3>
|
||
<h3 class="atx" id="sdl_createtexturefromsurface">SDL_CreateTextureFromSurface</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
DL_Texture <span class="token operator">*</span> <span class="token function">SDL_CreateTextureFromSurface</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span> SDL_Surface <span class="token operator">*</span> surface<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>由已存在的Surface创建Texture。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>创建成功返回对应SDL_Texture指针,失败返回NULL。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_destroytexture">SDL_DestroyTexture</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_DestroyTexture</span><span class="token punctuation">(</span>SDL_Texture <span class="token operator">*</span> texture<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>销毁指定的Texture。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_rendercopy">SDL_RenderCopy</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_RenderCopy</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span> SDL_Texture <span class="token operator">*</span> texture<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> srcrect<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> dstrect<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>从Texture中复制指定部分到渲染目标中。当源区域与指定区域大小不一致时,会进行相应缩放。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">renderer</td>
|
||
<td align="center">渲染器指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">texture</td>
|
||
<td align="center">需要进行复制的texture</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">srcrect</td>
|
||
<td align="center">需要进行复制的源区域,NULL表示整个区域</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">dstrect</td>
|
||
<td align="center">需要进行复制的目标区域,NULL表示整个区域</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_rendercopyex">SDL_RenderCopyEx</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> SDLCALL <span class="token function">SDL_RenderCopyEx</span><span class="token punctuation">(</span>SDL_Renderer <span class="token operator">*</span> renderer<span class="token punctuation">,</span> SDL_Texture <span class="token operator">*</span> texture<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> srcrect<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> dstrect<span class="token punctuation">,</span> <span class="token keyword">const</span> <span class="token keyword">double</span> angle<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Point <span class="token operator">*</span>center<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_RendererFlip flip<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>从Texture中复制指定部分到渲染目标中, 同时可进行旋转和镜像翻转操作。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">render</td>
|
||
<td align="center">渲染器指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">texture</td>
|
||
<td align="center">需要进行复制的Texture</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">srcrect</td>
|
||
<td align="center">需要进行复制的源区域,NULL表示整个区域</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">dstrect</td>
|
||
<td align="center">复制去的目标区域,NULL表示整个渲染目标区域</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">angle</td>
|
||
<td align="center">旋转角度,顺时针方向旋转</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">center</td>
|
||
<td align="center">旋转中心点,为相对dstrect左上角的坐标。NULL表示围绕dstrect中心旋转</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">flip</td>
|
||
<td align="center">镜像翻转。为枚举类型SDL_RendererFlip,见下</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">typedef</span> <span class="token keyword">enum</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_FLIP_NONE <span class="token operator">=</span> <span class="token number">0x00000000</span><span class="token punctuation">,</span> <span class="token comment">// 不进行翻转</span>
|
||
SDL_FLIP_HORIZONTAL <span class="token operator">=</span> <span class="token number">0x00000001</span><span class="token punctuation">,</span> <span class="token comment">// 进行水平镜像翻转</span>
|
||
SDL_FLIP_VERTICAL <span class="token operator">=</span> <span class="token number">0x00000002</span> <span class="token comment">// 进行垂直镜像翻转</span>
|
||
<span class="token punctuation">}</span> SDL_RendererFlip<span class="token punctuation">;</span></code></pre>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_settexturealphamod">SDL_SetTextureAlphaMod</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_SetTextureAlphaMod</span><span class="token punctuation">(</span>SDL_Texture <span class="token operator">*</span> texture<span class="token punctuation">,</span> Uint8 alpha<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>为render copy设置透明度,需要配合<a href="#sdlsettextureblendmode">SDL_SetTextureBlendMode</a>使用。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>设置成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_settextureblendmode">SDL_SetTextureBlendMode</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_render.h</span>
|
||
<span class="token keyword">int</span> <span class="token function">SDL_SetTextureBlendMode</span><span class="token punctuation">(</span>SDL_Texture <span class="token operator">*</span> texture<span class="token punctuation">,</span> SDL_BlendMode blendMode<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>为<a href="#sdlrendercopy">SDL_RenderCopy</a>设置颜色混合模式。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>SDL_BlendMode见<a href="#sdlsetrenderdrawblendmode">SDL_SetRenderDrawBlendMode</a>参数。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>成功返回0,失败返回负数错误码。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_updatetexture">SDL_UpdateTexture</h3>
|
||
<h3 class="atx" id="sdl_updateyuvtexture">SDL_UpdateYUVTexture</h3>
|
||
<h3 class="atx" id="sdl_updatenvtexture">SDL_UpdateNVTexture</h3>
|
||
<h3 class="atx" id="sdl_locktexture">SDL_LockTexture</h3>
|
||
<h3 class="atx" id="sdl_locktexturetosurface">SDL_LockTextureToSurface</h3>
|
||
<h3 class="atx" id="sdl_unlocktexture">SDL_UnlockTexture</h3>
|
||
<h3 class="atx" id="sdl_pointinrect">SDL_PointInRect</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
SDL_bool <span class="token function">SDL_PointInRect</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_Point <span class="token operator">*</span>p<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span>r<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>判断一个点是否在一个区域中。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p><a href="#sdlpoint">SDL_Point</a> </p>
|
||
<p><a href="#sdlrect">SDL_Rect</a></p>
|
||
<p><strong>返回值</strong></p>
|
||
<p><a href="#sdlbool">SDL_bool</a></p>
|
||
<p>点在区域内返回SDL_TRUE, 点不在区域内返回SDL_FALSE。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_rectempty">SDL_RectEmpty</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
SDL_bool <span class="token function">SDL_RectEmpty</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span>r<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>判断一个区域是否面积。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p><a href="#sdlrect">SDL_Rect</a></p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>如果r为NULL或者对应区域面积(计算值)小于或等于0则返回SDL_TRUE,否则返回SDL_FALSE。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_rectequals">SDL_RectEquals</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
SDL_bool <span class="token function">SDL_RectEquals</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span>a<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span>b<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>判断两个区域是否相同。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p><a href="#sdlrect">SDL_Rect</a></p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>如果两个SDL_Rect指针都不为NULL,且左上角坐标相同、宽高也相同则返回SDL_TRUE,否则返回SDL_FALSE。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_hasintersection">SDL_HasIntersection</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
SDL_bool <span class="token function">SDL_HasIntersection</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> A<span class="token punctuation">,</span><span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> B<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>判断两个矩形区域是否有相交部分。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p><a href="#sdlrect">SDL_Rect</a></p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>如果两个SDL_Rect指针都不为NULL且有相交部分则返回SDL_TRUE,否则返回SDL_FALSE。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_intersectrect">SDL_IntersectRect</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
SDL_bool SDLCALL <span class="token function">SDL_IntersectRect</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> A<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> B<span class="token punctuation">,</span> SDL_Rect <span class="token operator">*</span> result<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>计算两个矩形区域相交部分。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>A,B: 需要计算的两个区域</p>
|
||
<p>result: A与B相交的部分。</p>
|
||
<p><a href="#sdlrect">SDL_Rect</a></p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>如果A、B有相交部分则返回SDL_TRUE,否则返回SDL_FALSE。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_unionrect">SDL_UnionRect</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
<span class="token keyword">void</span> SDLCALL <span class="token function">SDL_UnionRect</span><span class="token punctuation">(</span><span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> A<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_Rect <span class="token operator">*</span> B<span class="token punctuation">,</span> SDL_Rect <span class="token operator">*</span> result<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>计算两个矩形区域的并集。如果A、B是两个分离开的区域,则并为能将A、B两个区域包含在内的最小矩形区域。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>A,B: 需要计算的两个区域</p>
|
||
<p>result: A与B并集。</p>
|
||
<p><a href="#sdlrect">SDL_Rect</a></p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_loadwav">SDL_LoadWAV</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_audio.h</span>
|
||
|
||
<span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">define</span> <span class="token macro-name function">SDL_LoadWAV</span><span class="token expression"><span class="token punctuation">(</span>file<span class="token punctuation">,</span> spec<span class="token punctuation">,</span> audio_buf<span class="token punctuation">,</span> audio_len<span class="token punctuation">)</span> </span><span class="token punctuation">\</span>
|
||
<span class="token expression"><span class="token function">SDL_LoadWAV_RW</span><span class="token punctuation">(</span><span class="token function">SDL_RWFromFile</span><span class="token punctuation">(</span>file<span class="token punctuation">,</span> </span><span class="token string">"rb"</span><span class="token expression"><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span> spec<span class="token punctuation">,</span>audio_buf<span class="token punctuation">,</span>audio_len<span class="token punctuation">)</span></span></span>
|
||
|
||
SDL_AudioSpec <span class="token operator">*</span> <span class="token function">SDL_LoadWAV_RW</span><span class="token punctuation">(</span>SDL_RWops <span class="token operator">*</span> src<span class="token punctuation">,</span> <span class="token keyword">int</span> freesrc<span class="token punctuation">,</span> SDL_AudioSpec <span class="token operator">*</span> spec<span class="token punctuation">,</span> Uint8 <span class="token operator">*</span><span class="token operator">*</span> audio_buf<span class="token punctuation">,</span> Uint32 <span class="token operator">*</span> audio_len<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>导入WAV格式音频文件。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">file</td>
|
||
<td align="center">WAV文件名</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">spec</td>
|
||
<td align="center">SDL_AudioSpec,音频文件信息</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">audio_buf</td>
|
||
<td align="center">音频文件数据指针</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">audio_len</td>
|
||
<td align="center">音频文件长度(字节)指针</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><a href="#sdlaudiospec">SDL_AudioSpec</a></p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>成功返回SDL_AudioSpec指针,失败返回NULL。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_freewav">SDL_FreeWAV</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_audio.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_FreeWAV</span><span class="token punctuation">(</span>Uint8 <span class="token operator">*</span> audio_buf<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>释放<a href="#sdlloadwav">SDL_LoadWAV</a>导入的音频数据。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_openaudiodevice">SDL_OpenAudioDevice</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_audio.h</span>
|
||
SDL_AudioDeviceID <span class="token function">SDL_OpenAudioDevice</span><span class="token punctuation">(</span><span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span>device<span class="token punctuation">,</span> <span class="token keyword">int</span> iscapture<span class="token punctuation">,</span> <span class="token keyword">const</span> SDL_AudioSpec <span class="token operator">*</span>desired<span class="token punctuation">,</span> SDL_AudioSpec <span class="token operator">*</span>obtained<span class="token punctuation">,</span> <span class="token keyword">int</span> allowed_changes<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>打开指定的音频设备。</p>
|
||
<p><strong>参数</strong></p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th align="center">参数</th>
|
||
<th align="center">含义</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody><tr>
|
||
<td align="center">device</td>
|
||
<td align="center">设备名称,由<a href="#sdlgetaudiodevicename">SDL_GetAudioDeviceName</a>获得,为NULL则请求能使用的默认设备</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">iscapture</td>
|
||
<td align="center">是否是录音设备,0表示播放设备,非0表示录音设备</td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">desired</td>
|
||
<td align="center">期望输出格式。<a href="#sdlaudiospec">SDL_AudioSpec</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">obtained</td>
|
||
<td align="center">实际输出格式。<a href="#sdlaudiospec">SDL_AudioSpec</a></td>
|
||
</tr>
|
||
<tr>
|
||
<td align="center">allowed_changes</td>
|
||
<td align="center">当硬件不支持时是否允许改变。通常为0</td>
|
||
</tr>
|
||
</tbody></table>
|
||
<p><strong>返回值</strong></p>
|
||
<p>成功则返回一个有效设备ID。失败返回0</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_pauseaudiodevice">SDL_PauseAudioDevice</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_audio.h</span>
|
||
<span class="token keyword">void</span> <span class="token function">SDL_PauseAudioDevice</span><span class="token punctuation">(</span>SDL_AudioDeviceID dev<span class="token punctuation">,</span> <span class="token keyword">int</span> pause_on<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>设置指定播放设备的暂停和播放。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>dev: 由<a href="#sdlopenaudiodevice">SDL_OpenAudioDevice</a>打开的设备ID。</p>
|
||
<p>pause_on: 暂停/播放,0为播放,非0为暂停。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_getaudiodevicename">SDL_GetAudioDeviceName</h3>
|
||
<p><strong>声明</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_audio.h</span>
|
||
|
||
<span class="token keyword">const</span> <span class="token keyword">char</span> <span class="token operator">*</span> <span class="token function">SDL_GetAudioDeviceName</span><span class="token punctuation">(</span><span class="token keyword">int</span> index<span class="token punctuation">,</span> <span class="token keyword">int</span> iscapture<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p><strong>功能</strong></p>
|
||
<p>根据索引查询音频设备名称。</p>
|
||
<p><strong>参数</strong></p>
|
||
<p>index: 设备索引</p>
|
||
<p>iscapture: 是否为录音设备。0查询非录音设备,非0查询录音设备。</p>
|
||
<p><strong>返回值</strong></p>
|
||
<p>查询到设备返回设备名称,否则返回NULL。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h2 class="atx" id="结构体、枚举、宏定义">结构体、枚举、宏定义</h2>
|
||
<h3 class="atx" id="sdl_bool">SDL_bool</h3>
|
||
<p><strong>定义</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_stdinc.h</span>
|
||
|
||
<span class="token keyword">typedef</span> <span class="token keyword">enum</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_FALSE <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span>
|
||
SDL_TRUE <span class="token operator">=</span> <span class="token number">1</span>
|
||
<span class="token punctuation">}</span> SDL_bool<span class="token punctuation">;</span></code></pre>
|
||
<p><strong>描述</strong></p>
|
||
<p>定义布尔值。虽然也是1为真0为假,但是这样定义之后在代码中使用这个定义可以增加可读性。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_point">SDL_Point</h3>
|
||
<p><strong>定义</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">SDL_Point</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">int</span> x<span class="token punctuation">;</span> <span class="token comment">// 点的横坐标</span>
|
||
<span class="token keyword">int</span> y<span class="token punctuation">;</span> <span class="token comment">// 点的纵坐标</span>
|
||
<span class="token punctuation">}</span> SDL_Point<span class="token punctuation">;</span></code></pre>
|
||
<p><strong>描述</strong></p>
|
||
<p>定义了一个点。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_rect">SDL_Rect</h3>
|
||
<p><strong>定义</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_rect.h</span>
|
||
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">SDL_Rect</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">int</span> x<span class="token punctuation">,</span> y<span class="token punctuation">;</span> <span class="token comment">//矩形区域左上角坐标</span>
|
||
<span class="token keyword">int</span> w<span class="token punctuation">,</span> h<span class="token punctuation">;</span> <span class="token comment">// 矩形区域宽和高 单位为像素</span>
|
||
<span class="token punctuation">}</span> SDL_Rect<span class="token punctuation">;</span></code></pre>
|
||
<p><strong>描述</strong></p>
|
||
<p>一个由左上角坐标和宽高决定的矩形区域。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_surface">SDL_Surface</h3>
|
||
<p><strong>定义</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_surface.h</span>
|
||
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">SDL_Surface</span>
|
||
<span class="token punctuation">{</span>
|
||
Uint32 flags<span class="token punctuation">;</span> <span class="token comment">//</span>
|
||
SDL_PixelFormat <span class="token operator">*</span>format<span class="token punctuation">;</span> <span class="token comment">// 像素格式信息</span>
|
||
<span class="token keyword">int</span> w<span class="token punctuation">,</span> h<span class="token punctuation">;</span> <span class="token comment">// 宽、高</span>
|
||
<span class="token keyword">int</span> pitch<span class="token punctuation">;</span> <span class="token comment">// 每一行像素字节数</span>
|
||
<span class="token keyword">void</span> <span class="token operator">*</span>pixels<span class="token punctuation">;</span> <span class="token comment">// 界面上像素对应的数据内存指针</span>
|
||
|
||
|
||
<span class="token comment">/** 以下这些成员可以暂时先不用了解 */</span>
|
||
<span class="token keyword">void</span> <span class="token operator">*</span>userdata<span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> locked<span class="token punctuation">;</span>
|
||
<span class="token keyword">void</span> <span class="token operator">*</span>list_blitmap<span class="token punctuation">;</span>
|
||
SDL_Rect clip_rect<span class="token punctuation">;</span>
|
||
SDL_BlitMap <span class="token operator">*</span>map<span class="token punctuation">;</span>
|
||
<span class="token keyword">int</span> refcount<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span> SDL_Surface<span class="token punctuation">;</span></code></pre>
|
||
<p><strong>描述</strong></p>
|
||
<p>进行位图操作的像素集。可以理解为一张画布,可以在上面进行绘图和其他像素操作。</p>
|
||
<p> </p>
|
||
<p> </p>
|
||
<h3 class="atx" id="sdl_audiospec">SDL_AudioSpec</h3>
|
||
<p><strong>定义</strong></p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token comment">// SDL_audio.h</span>
|
||
|
||
<span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token class-name">SDL_AudioSpec</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token keyword">int</span> freq<span class="token punctuation">;</span> <span class="token comment">// 采样率</span>
|
||
SDL_AudioFormat format<span class="token punctuation">;</span> <span class="token comment">// 音频数据格式</span>
|
||
Uint8 channels<span class="token punctuation">;</span> <span class="token comment">// 声道数: 1为单声道 2为立体声</span>
|
||
Uint8 silence<span class="token punctuation">;</span> <span class="token comment">// </span>
|
||
Uint16 samples<span class="token punctuation">;</span> <span class="token comment">//</span>
|
||
Uint16 padding<span class="token punctuation">;</span> <span class="token comment">//</span>
|
||
Uint32 size<span class="token punctuation">;</span> <span class="token comment">// 音频数据大小(字节)</span>
|
||
SDL_AudioCallback callback<span class="token punctuation">;</span> <span class="token comment">// 为音频设备提供数据的回调函数</span>
|
||
<span class="token keyword">void</span> <span class="token operator">*</span>userdata<span class="token punctuation">;</span> <span class="token comment">// 向回调函数中传递的数据</span>
|
||
<span class="token punctuation">}</span> SDL_AudioSpec<span class="token punctuation">;</span></code></pre>
|
||
<p><strong>描述</strong></p>
|
||
<p>保存音频文件一些格式信息。</p>
|
||
<p>userdata最主要用于传递<a href="#sdlloadwav">SDL_LoadWAV</a>加载进来的audio_buf数据,也可以自定义一些其他数据。</p>
|
||
<p>SDL_AudioCallback为回调函数类型,定义如下:</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token keyword">typedef</span> <span class="token keyword">void</span> <span class="token punctuation">(</span>SDLCALL <span class="token operator">*</span> SDL_AudioCallback<span class="token punctuation">)</span> <span class="token punctuation">(</span><span class="token keyword">void</span> <span class="token operator">*</span>userdata<span class="token punctuation">,</span> Uint8 <span class="token operator">*</span> stream<span class="token punctuation">,</span><span class="token keyword">int</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>
|
||
<p>userdata为通过SDL_AudioSpec传入的userdata,</p>
|
||
<p>stream为每次向音频设备传递的声音数据,</p>
|
||
<p>len为传递的stream长度。</p>
|
||
<p>一个SDL_AudioCallback例子如下:</p>
|
||
<pre><code class="fenced-code-block language-c"><span class="token keyword">typedef</span> <span class="token keyword">struct</span> <span class="token punctuation">{</span>
|
||
Uint8 <span class="token operator">*</span>audio_buf<span class="token punctuation">;</span>
|
||
Uint32 audio_len<span class="token punctuation">;</span>
|
||
Uint32 pos<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span> AudioInfo<span class="token punctuation">;</span>
|
||
|
||
|
||
<span class="token keyword">void</span> <span class="token function">callback</span><span class="token punctuation">(</span><span class="token keyword">void</span> <span class="token operator">*</span>userdata<span class="token punctuation">,</span> Uint8 <span class="token operator">*</span> stream<span class="token punctuation">,</span> <span class="token keyword">int</span> len<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
AudioInfo <span class="token operator">*</span>audio_info <span class="token operator">=</span> <span class="token punctuation">(</span>AudioInfo <span class="token operator">*</span><span class="token punctuation">)</span>userdata<span class="token punctuation">;</span>
|
||
|
||
Uint32 remain_len <span class="token operator">=</span> audio_info<span class="token operator">-></span>audio_len <span class="token operator">-</span> audio_info<span class="token operator">-></span>pos<span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span>remain_len <span class="token operator">></span> len<span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_memcpy</span><span class="token punctuation">(</span>stream<span class="token punctuation">,</span> audio_info<span class="token operator">-></span>audio_buf <span class="token operator">+</span> audio_info<span class="token operator">-></span>pos<span class="token punctuation">,</span> len<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
audio_info<span class="token operator">-></span>pos <span class="token operator">+=</span> len<span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
<span class="token keyword">else</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_memcpy</span><span class="token punctuation">(</span>stream<span class="token punctuation">,</span> audio_info<span class="token operator">-></span>audio_buf <span class="token operator">+</span> audio_info<span class="token operator">-></span>pos<span class="token punctuation">,</span> remain_len<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
audio_info<span class="token operator">-></span>pos <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token punctuation">}</span>
|
||
|
||
<span class="token keyword">void</span> <span class="token function">play_audio</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
SDL_AudioSpec spec<span class="token punctuation">;</span>
|
||
Uint8 <span class="token operator">*</span>audio_buf<span class="token punctuation">;</span>
|
||
Uint32 audio_len<span class="token punctuation">;</span>
|
||
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">SDL_LoadWAV</span><span class="token punctuation">(</span><span class="token string">"sound.wav"</span><span class="token punctuation">,</span> <span class="token operator">&</span>spec<span class="token punctuation">,</span> <span class="token operator">&</span>audio_buf<span class="token punctuation">,</span> <span class="token operator">&</span>audio_len<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token constant">NULL</span><span class="token punctuation">)</span>
|
||
<span class="token punctuation">{</span>
|
||
<span class="token function">SDL_Log</span><span class="token punctuation">(</span><span class="token string">"wav load failed: %s"</span><span class="token punctuation">,</span> <span class="token function">SDL_GetError</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span>
|
||
spec<span class="token punctuation">.</span>callback <span class="token operator">=</span> callback<span class="token punctuation">;</span>
|
||
AudioInfo audio_info <span class="token operator">=</span> <span class="token punctuation">{</span>audio_buf<span class="token punctuation">,</span> audio_len<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
|
||
spec<span class="token punctuation">.</span>userdata <span class="token operator">=</span> <span class="token operator">&</span>audio_info<span class="token punctuation">;</span>
|
||
|
||
SDL_AudioDeviceID dvice_id <span class="token operator">=</span> <span class="token function">SDL_OpenAudioDevice</span><span class="token punctuation">(</span><span class="token constant">NULL</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token operator">&</span>spec<span class="token punctuation">,</span> <span class="token operator">&</span>spec<span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
|
||
<span class="token function">SDL_PauseAudioDevice</span><span class="token punctuation">(</span>dvice_id<span class="token punctuation">,</span> SDL_FALSE<span class="token punctuation">)</span><span class="token punctuation">;</span>
|
||
<span class="token punctuation">}</span></code></pre>
|
||
<h1 class="atx" id="unknown">Unknown</h1>
|
||
<pre><code class="fenced-code-block language-c++">#include <SDL2/SDL.h>
|
||
|
||
#define WIDTH 720
|
||
#define HEIGHT 720
|
||
|
||
#define FR 30
|
||
#define FT 1000 / FR
|
||
|
||
|
||
SDL_Window *window;
|
||
SDL_Renderer *render;
|
||
SDL_Surface *image_surface;
|
||
SDL_Texture *image_texture;
|
||
SDL_Rect render_rect;
|
||
|
||
|
||
void calc_redner_rect()
|
||
{
|
||
int window_width, window_height, texture_width, texture_height;
|
||
SDL_GetWindowSize(window, &window_width, &window_height);
|
||
SDL_QueryTexture(image_texture, NULL, NULL, &texture_width, &texture_height);
|
||
double scale = 1.0;
|
||
if ((texture_width > window_width) && (texture_height > window_height))
|
||
{
|
||
double xscale = (double)window_width / texture_width;
|
||
double yscale = (double)window_height / texture_height;
|
||
scale = xscale < yscale ? xscale : yscale;
|
||
}
|
||
else if (texture_width > window_width)
|
||
{
|
||
scale = (double)window_width / texture_width;
|
||
}
|
||
else if (texture_height > window_height)
|
||
{
|
||
scale = (double)window_height / texture_height;
|
||
}
|
||
|
||
texture_height *= scale;
|
||
texture_width *= scale;
|
||
|
||
render_rect.x = (window_width - texture_width) / 2;
|
||
render_rect.y = (window_height - texture_height) / 2;
|
||
render_rect.w = texture_width;
|
||
render_rect.h = texture_height;
|
||
|
||
|
||
SDL_Log("calc_redner_rect");
|
||
}
|
||
|
||
|
||
int initialize()
|
||
{
|
||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
|
||
{
|
||
SDL_Log("SDL_Init failed: %s", SDL_GetError());
|
||
return -1;
|
||
}
|
||
|
||
window = SDL_CreateWindow("SDL",
|
||
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
||
WIDTH, HEIGHT,
|
||
SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE
|
||
);
|
||
if (NULL == window)
|
||
{
|
||
SDL_Log("SDL_CreateWindow failed: %s", SDL_GetError());
|
||
return -1;
|
||
}
|
||
render = SDL_CreateRenderer(window, -1, 0);
|
||
if (NULL == render)
|
||
{
|
||
SDL_Log("SDL_CreateRenderer error: %s", SDL_GetError());
|
||
return -1;
|
||
}
|
||
|
||
image_surface = SDL_LoadBMP("1685074549643.bmp");
|
||
if (NULL == image_surface)
|
||
{
|
||
SDL_Log("Image load failed: %s", SDL_GetError());
|
||
return -1;
|
||
}
|
||
|
||
image_texture = SDL_CreateTextureFromSurface(render, image_surface);
|
||
if (NULL == image_texture)
|
||
{
|
||
SDL_Log("SDL_CreateTextureFromSurface failed: %s", SDL_GetError());
|
||
return -1;
|
||
}
|
||
|
||
calc_redner_rect();
|
||
|
||
return 0;
|
||
}
|
||
|
||
void release()
|
||
{
|
||
if (NULL != image_texture)
|
||
{
|
||
SDL_DestroyTexture(image_texture);
|
||
}
|
||
|
||
if (NULL != image_surface)
|
||
{
|
||
SDL_FreeSurface(image_surface);
|
||
}
|
||
|
||
if (NULL != render)
|
||
{
|
||
SDL_DestroyRenderer(render);
|
||
}
|
||
|
||
if (NULL != window)
|
||
{
|
||
SDL_DestroyWindow(window);
|
||
}
|
||
|
||
SDL_Quit();
|
||
}
|
||
|
||
|
||
void draw()
|
||
{
|
||
SDL_SetRenderDrawColor(render, 255, 255, 255, 255);
|
||
SDL_RenderClear(render);
|
||
|
||
SDL_RenderCopy(render, image_texture, NULL, &render_rect);
|
||
SDL_RenderPresent(render);
|
||
}
|
||
|
||
|
||
|
||
|
||
void event_loop()
|
||
{
|
||
SDL_Event event;
|
||
while (1)
|
||
{
|
||
Uint64 start = SDL_GetTicks64();
|
||
while (SDL_PollEvent(&event))
|
||
{
|
||
switch (event.type)
|
||
{
|
||
case SDL_MOUSEMOTION:
|
||
break;
|
||
case SDL_MOUSEBUTTONDOWN:
|
||
break;
|
||
case SDL_MOUSEBUTTONUP:
|
||
break;
|
||
case SDL_MOUSEWHEEL:
|
||
break;
|
||
case SDL_QUIT:
|
||
return;
|
||
case SDL_WINDOWEVENT:
|
||
if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
|
||
{
|
||
calc_redner_rect();
|
||
}
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
draw();
|
||
Uint64 end = SDL_GetTicks64();
|
||
int time = end - start;
|
||
// SDL_Log("time = %d, FT = %d", time, FT);
|
||
if (time < FT)
|
||
{
|
||
SDL_Delay(FT - time);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
typedef struct {
|
||
Uint8 *audio_buf;
|
||
Uint32 audio_len;
|
||
Uint32 pos;
|
||
} AudioInfo;
|
||
|
||
void callback(void *userdata, Uint8 * stream, int len)
|
||
{
|
||
AudioInfo *audio_info = (AudioInfo *)userdata;
|
||
// SDL_Log("len = %d, len = %d, pos = %u", audio_info->audio_len, len, audio_info->pos);
|
||
Uint32 remain_len = audio_info->audio_len - audio_info->pos;
|
||
if (remain_len > len)
|
||
{
|
||
SDL_memcpy(stream, audio_info->audio_buf + audio_info->pos, len);
|
||
audio_info->pos += len;
|
||
}
|
||
else
|
||
{
|
||
SDL_memcpy(stream, audio_info->audio_buf + audio_info->pos, remain_len);
|
||
audio_info->pos = 0;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
void play_wav()
|
||
{
|
||
|
||
}
|
||
|
||
#undef main
|
||
int main(int argc, char *argv[])
|
||
{
|
||
if (initialize() < 0)
|
||
{
|
||
release();
|
||
return -1;
|
||
}
|
||
SDL_AudioSpec spec;
|
||
Uint8 *audio_buf;
|
||
Uint32 audio_len;
|
||
if (SDL_LoadWAV("sound.wav", &spec, &audio_buf, &audio_len) == NULL)
|
||
{
|
||
SDL_Log("wav load failed: %s", SDL_GetError());
|
||
return -1;
|
||
}
|
||
spec.callback = callback;
|
||
AudioInfo audio_info = {audio_buf, audio_len, 0};
|
||
spec.userdata = &audio_info;
|
||
SDL_Log("%u", audio_len);
|
||
SDL_AudioDeviceID dvice_id = SDL_OpenAudioDevice(NULL, 0, &spec, &spec, 0);
|
||
|
||
SDL_PauseAudioDevice(dvice_id, SDL_FALSE);
|
||
SDL_Log("Here !");
|
||
event_loop();
|
||
SDL_CloseAudioDevice(dvice_id);
|
||
SDL_FreeWAV(audio_buf);
|
||
release();
|
||
return 0;
|
||
}</code></pre>
|
||
<h1 class="atx" id="cpp多线程">CPP多线程</h1>
|
||
<pre><code class="fenced-code-block language-c++"></code></pre>
|
||
</article>
|
||
</body>
|
||
</html> |