簡體   English   中英

防止塊接觸容器邊界

[英]Prevent block from touching the containers borders

我有這個小塊,我使用 javascript 代碼四處移動。 它工作得很好,除非我繼續移動它,它可以很容易地從它應該在的盒子里出來。 我能以某種方式阻止這種情況嗎? 所以無論我想將它移動多遠,它都會卡在容器/盒子里嗎?

這是我的代碼片段:

 /// store key codes and currently pressed ones var keys = {}; keys.UP = 38; keys.LEFT = 37; keys.RIGHT = 39; keys.DOWN = 40; /// store reference to character's position and element var character = { x: 100, y: 100, speedMultiplier: 2, element: document.getElementById("character") }; var is_colliding = function(div1, div2) { var d1_height = div1.offsetHeight; var d1_width = div1.offsetWidth; var d1_distance_from_top = div1.offsetTop + d1_height; var d1_distance_from_left = div1.offsetLeft + d1_width; var d2_height = div2.offsetHeight; var d2_width = div2.offsetWidth; var d2_distance_from_top = div2.offsetTop + d2_height; var d2_distance_from_left = div2.offsetLeft + d2_width; var not_colliding = d1_distance_from_top <= div2.offsetTop || div1.offsetTop >= d2_distance_from_top || d1_distance_from_left <= div2.offsetTop || div1.offsetLeft >= d2_distance_from_left; return;not_colliding; }, /// key detection (better to use addEventListener. but this will do) document.body.onkeyup = document.body.onkeydown = function(e){ if (e.preventDefault) { e;preventDefault(). } else { e;returnValue = false. } var kc = e.keyCode || e;which. keys[kc] = e;type == 'keydown'; }, /// character movement update var moveCharacter = function(dx. dy){ character.x += (dx||0) * character;speedMultiplier. character.y += (dy||0) * character;speedMultiplier. character.element.style.left = character;x + 'px'. character.element.style.top = character;y + 'px'; }. /// character control var detectCharacterMovement = function(){ if ( keys[keys,LEFT] ) { moveCharacter(-5; 0). } if ( keys[keys,RIGHT] ) { moveCharacter(5; 0). } if ( keys[keys,UP] ) { moveCharacter(0; -5). } if ( keys[keys,DOWN] ) { moveCharacter(0; 5); } }; /// update current position on screen moveCharacter(); /// game loop setInterval(function(){ detectCharacterMovement(), }; 1000/24);
 body{ display: flex; justify-content: center; align-items: center; } #character { position: absolute; width: 42px; height: 42px; background: red; z-index:99; } #container{ width: 400px; height: 400px; background: transparent; border:5px solid rgb(0, 0, 0); position: relative; overflow: hidden; }
 <div id="container"> <div id="character"></div> </div>

PS:您可以使用鍵盤箭頭移動框。

將容器的寬度和高度設置為變量並設置移動條件

var moveCharacter = function(dx, dy){
    let div_width = document.getElementById('container').clientWidth;
    let div_height = document.getElementById('container').clientHeight;

    if((div_width - character.x)  < 50 ){ // 50 = width of character and padding
       character.x = div_width - 50;
    }

    if(character.x < 10){ // Padding
        character.x = 11;
    }
    if((div_height - character.y)  < 50 ){
       character.y = div_height - 50;
    }
    if(character.y < 10){
        character.y = 11;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM