यह मेरे लिए काम करने लगता है।
यदि स्प्राइट्स ग्रिड में हैं, तो स्प्राइट्स की background-size
100% संख्या और स्प्राइट्स की 100% संख्या निर्धारित करें। फिर उपयोग करेंbackground-position -<x*100>% -<y*100>%
जहां x और y शून्य आधारित स्प्राइट हैं, वहां
दूसरे शब्दों में, यदि आप चाहते हैं कि बाईं ओर से तीसरा स्प्राइट और दूसरी पंक्ति जो 2 से अधिक है और 1 नीचे है
background-position: -200% -100%;
उदाहरण के लिए यहां एक स्प्राइट शीट 4x2 स्प्राइट है
और यहाँ एक उदाहरण है
div {
margin: 3px;
display: inline-block;
}
.sprite {
background-image: url('https://i.stack.imgur.com/AEYNC.png');
background-size: 400% 200%; /* 4x2 sprites so 400% 200% */
}
.s0x0 { background-position: -0% -0%; }
.s1x0 { background-position: -100% -0%; }
.s2x0 { background-position: -200% -0%; }
.s3x0 { background-position: -300% -0%; }
.s0x1 { background-position: -0% -100%; }
.s1x1 { background-position: -100% -100%; }
.s2x1 { background-position: -200% -100%; }
.s3x1 { background-position: -300% -100%; }
<div class="sprite s3x1" style="width: 45px; height:20px"></div>
<div class="sprite s3x1" style="width: 128px; height:30px"></div>
<div class="sprite s3x1" style="width: 64px; height:56px"></div>
<div class="sprite s2x1" style="width: 57px; height:60px"></div>
<div class="sprite s3x0" style="width: 45px; height:45px"></div>
<div class="sprite s0x1" style="width: 12px; height:100px"></div>
<br/>
<div class="sprite s0x0" style="width: 45px; height:20px"></div>
<div class="sprite s1x0" style="width: 128px; height:45px"></div>
<div class="sprite s2x0" style="width: 64px; height:56px"></div>
<div class="sprite s3x0" style="width: 57px; height:60px"></div>
<br/>
<div class="sprite s0x1" style="width: 45px; height:45px"></div>
<div class="sprite s1x1" style="width: 12px; height:50px"></div>
<div class="sprite s2x1" style="width: 12px; height:50px"></div>
<div class="sprite s3x1" style="width: 12px; height:50px"></div>
यदि स्प्राइट्स अलग-अलग आकार के हों, तो आपको background-size
प्रत्येक स्प्राइट को प्रतिशत में सेट करने की आवश्यकता होगी , ताकि स्प्राइट की चौड़ाई 100% हो जाए
दूसरे शब्दों में अगर छवि 640px चौड़ी है और उस चित्र के अंदर स्प्राइट 45px चौड़ा है तो उस 45px को 640px होने के लिए
xScale = imageWidth / spriteWidth
xScale = 640 / 45
xScale = 14.2222222222
xPercent = xScale * 100
xPercent = 1422.22222222%
फिर आपको ऑफसेट सेट करने की आवश्यकता है। ऑफसेट की जटिलता यह है कि 0% को बाईं ओर और 100% को दाएं से संरेखित किया गया है।
ग्राफिक्स प्रोग्रामर के रूप में, मुझे उम्मीद है कि तत्व में 100% पृष्ठभूमि को स्थानांतरित करने के लिए पूरे तत्व को दूसरे शब्दों में, पूरी तरह से दाईं ओर से बंद कर दिया जाएगा, लेकिन 100% का मतलब यह नहीं है कि इसका उपयोग कब किया जाए backgrouhnd-position
। background-position: 100%;
सही गठबंधन का मतलब है। तो, स्केलिंग के बाद उस खाते में लेने के लिए मंचों
xOffsetScale = 1 + 1 / (xScale - 1)
xOffset = offsetX * offsetScale / imageWidth
मान लें कि ऑफसेट 31 पीएक्स है
xOffsetScale = 1 + 1 / (14.222222222 - 1)
xOffsetScale = 1.0756302521021115
xOffset = offsetX * xOffsetScale / imageWidth
xOffset = 31 * 1.0756302521021115 / 640
xOffset = 0.05210084033619603
xOffsetPercent = 5.210084033619603
यहां 2 स्प्राइट्स के साथ 640x480 की छवि है।
- 31x 27y आकार में 45w 32h
- 500x 370 के आकार पर 105w 65h
स्प्राइट 1 के लिए ऊपर दिए गए गणित का पालन करें
xScale = imageWidth / spriteWidth
xScale = 640 / 45
xScale = 14.2222222222
xPercent = xScale * 100
xPercent = 1422.22222222%
xOffsetScale = 1 + 1 / (14.222222222 - 1)
xOffsetScale = 1.0756302521021115
xOffset = offsetX * xOffsetScale / imageWidth
xOffset = 31 * 1.0756302521021115 / 640
xOffset = 0.05210084033619603
xOffsetPercent = 5.210084033619603
yScale = imageHeight / spriteHEight
yScale = 480 / 32
yScale = 15
yPercent = yScale * 100
yPercent = 1500%
yOffsetScale = 1 + 1 / (15 - 1)
yOffsetScale = 1.0714285714285714
yOffset = offsetY * yOffsetScale / imageHeight
yOffset = 27 * 1.0714285714285714 / 480
yOffset = 0.06026785714285714
yOffsetPercent = 6.026785714285714
div {
margin: 3px;
display: inline-block;
}
.sprite {
background-image: url('https://i.stack.imgur.com/mv9lJ.png');
}
.s1 {
background-size: 1422.2222% 1500%;
background-position: 5.210084033619603% 6.026785714285714%;
}
.s2 {
background-size: 609.5238095238095% 738.4615384615385%;
background-position: 93.45794392523367% 89.1566265060241%;
}
<div class="sprite s1" style="width: 45px; height:20px"></div>
<div class="sprite s1" style="width: 128px; height:30px"></div>
<div class="sprite s1" style="width: 64px; height:56px"></div>
<div class="sprite s1" style="width: 57px; height:60px"></div>
<div class="sprite s1" style="width: 45px; height:45px"></div>
<div class="sprite s1" style="width: 12px; height:50px"></div>
<div class="sprite s1" style="width: 50px; height:40px"></div>
<hr/>
<div class="sprite s2" style="width: 45px; height:20px"></div>
<div class="sprite s2" style="width: 128px; height:30px"></div>
<div class="sprite s2" style="width: 64px; height:56px"></div>
<div class="sprite s2" style="width: 57px; height:60px"></div>
<div class="sprite s2" style="width: 45px; height:45px"></div>
<div class="sprite s2" style="width: 12px; height:50px"></div>
<div class="sprite s2" style="width: 50px; height:40px"></div>