记忆游戏卡旋转不正确

Posted

技术标签:

【中文标题】记忆游戏卡旋转不正确【英文标题】:Memory Game Cards Not Rotating Properly 【发布时间】:2022-01-24 03:59:46 【问题描述】:

我一直在学习如何创建一个记忆游戏,并认为我在仔细按照说明进行操作,但我遇到了障碍。在我的 html 中,我有一个用于卡片的 div 和两个用于设置卡片正面和背面样式的子 div。

<div class="container">
    <div id="memory_board">
        <div class="card">
            <div id="back0" class="cardFace cardFaceBack"></div>
            <div id="front0" class="cardFace cardFaceFront" class="card"></div>
        </div>
    </div>
</div>

记忆游戏的卡片数量会有所不同。

当我运行代码时,它们堆叠在一起,这意味着当您单击一张卡片时,背面会按预期翻转,但正面会在其原始位置下方翻转。这是我的codepen。如何调整我的代码,使卡片看起来像正确翻转?

===============编辑===================

快速提问,当我包含指向 codepen 的链接时,我是否仍然包含所有代码?

这个游戏的css是:

* 

    margin:0;
    padding:0;
    box-sizing:border-box;



div.container 

    display: flex;
    justify-content: center;
    align-items: center;
    vertical-align: middle;



div#memory_board

    background:#CCC;
    border:#999 1px solid;
    display: inline-block;
    padding: 10px;
    perspective: 1000px;



.card 

    width:100px;
    height:133px;
    display: inline-block;
    margin:0px;
    padding:10px;
    transition: transform 1s;
    transform-style: preserve-3d;
    transform-origin: center right;
    cursor: pointer;
    position: relative;



.card.is-flipped 

    transform: translateX(-100%) rotateY(-180deg);



.cardFace 

    position: absolute;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;



.cardFaceFront 

    position: inherit; 
    background: whitesmoke;
    color: black;
    font-weight: bold;
    font-size: 40px;
    border:#000 1px solid;
    text-align:center;
    vertical-align: middle;
    transform: rotateY(180deg);



.cardFaceBack 

    background: url("https://images.cdn2.stockunlimited.net/preview1300/playing-cards- 
    background_1608080.jpg"); no-repeat; 
    background-size: cover;
    position: relative;
    border:#000 1px solid;


另外,这个程序的javascript是:

var memory_array = ['A','A','B','B'];
var memory_values = [];
var memory_tile_ids = [];
var tiles_flipped = 0;

const memory_board = document.getElementById('memory_board');

let getRndInteger = (min, max) => Math.floor(Math.random() * (max - min) ) + min

//  the following function randomly shuffles elements in an array using the Fisher-Yates (aka Knuth) shuffle

let shuffle = array => 

    let currentIndex = array.length,  randomIndex;

// While there remain elements to shuffle...
    while (currentIndex != 0) 

    // Pick a remaining element...
        randomIndex = Math.floor(Math.random() * currentIndex);
        currentIndex--;

    // And swap it with the current element.
        [array[currentIndex], array[randomIndex]] = [
        array[randomIndex], array[currentIndex]];

    

    return array;



function initiateCard () 

    let card = document.querySelectorAll('.card');

    card.forEach( card => card.addEventListener ( 'click', () => 

      card.classList.toggle('is-flipped');

    ));



function newBoard() 

    let memoryArray = shuffle (memory_array);

    for (let i = 0; i <= memoryArray.length - 1; i++) 

        document.getElementById("front" + i).innerText = memory_array[i];

    



$( document ).ready(function() 

    newBoard ();
    initiateCard ();

);

当游戏开始时,memory_array 会重新洗牌,并将每个元素分配给卡片。不过翻牌的时候

我以为我已按照说明进行操作,但我不明白为什么在转身时,正面低于背面。我需要做哪些调整,在翻转卡片后,卡片的正面与卡片的背面在同一位置,而不是在它下面。

【问题讨论】:

您可以添加其余代码吗? 感谢您的回复,我已经编辑了问题。我最初确实包含了其余的代码,因为我在程序中包含了指向 codepen 的链接。当时,SO 不允许我提交它检测到 codepen 链接的问题,但问题中仍然需要一些代码。 【参考方案1】:

动画或 gif 将有助于实现您想要实现的目标,从您在代码中的注释我可以看到您正在尝试复制这一点,但是您构建代码的方式似乎并不像这个

https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于记忆游戏卡旋转不正确的主要内容,如果未能解决你的问题,请参考以下文章

Unity 之 获取物体的旋转角正确数值

如何使用新的 Unity4.3 2D 框架正确翻转 2D 角色? (动画期间游戏对象的旋转)

如何在两个视图不正确时自动翻转它们

为啥窗口的子视图最初定位不正确,但旋转后重新定位正确?

为太空模拟器/游戏旋转宇宙飞船模型

旋转后平移手势行为不正确