- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近一直在制作一款打砖 block 游戏,但是遇到了一些问题。我遇到的问题是尝试从数组列表中删除一 block 砖。我首先使用bricks.remove(i)
(i代表我想要删除的砖 block )来做到这一点,但是这当然会导致问题,因为它使数组向左移动,这意味着其余的部分砖头被弄脏了。我尝试的第二个想法是将其设置为空,但这只会导致游戏在要销毁砖 block 时崩溃。
有人有一个解决方案可以帮助我在不移动数组的情况下移除砖 block 吗?
这是将砖 block 创建到数组中的方法:
public void createGameObjects()
{
synchronized( Model.class )
{
ball = new GameObj(W/2, H/2, BALL_SIZE, BALL_SIZE, Colour.RED );
bat = new GameObj(210, H - BRICK_HEIGHT*1.5f, BAT_WIDTH,
BRICK_HEIGHT/4, Colour.GRAY);
bricks = new ArrayList<>();
int pos = 50;
int pos2 = 50;
//first row
for ( int i = 0; i < 10; i++){
bricks.add(new GameObj(pos,300, BRICK_HEIGHT, BRICK_WIDTH, Colour.ORANGE));
pos = pos + 50;
}
//Second row
pos = 50;
for ( int i = 0; i < 10; i++){
bricks.add(new GameObj(pos,270, BRICK_HEIGHT, BRICK_WIDTH, Colour.RED));
pos = pos + 50;
}
//Third row
pos = 50;
for ( int i = 0; i < 10; i++){
bricks.add(new GameObj(pos,240, BRICK_HEIGHT, BRICK_WIDTH, Colour.GRAY));
pos = pos + 50;
}
// Blue bricks for bricks to be hit twice
pos = 50;
for ( int i = 0; i < 10; i++){
bricks.add(new GameObj(pos,300, BRICK_HEIGHT, BRICK_WIDTH, Colour.BLUE));
pos = pos + 50;
}
// Greenbreaks out of view to increase the size of array
for ( int i = 0; i < 60; i++){
bricks.add(new GameObj(0,0, BRICK_HEIGHT, BRICK_WIDTH, Colour.GREEN));
}
}
}
此方法从砖 block 的数组列表中声明 Gameobj,并检测球击中砖 block 。 (这是我努力去除砖 block 的方法):
public void runAsSeparateThread()
{
final float S = 3; // Units to move (Speed)
try
{
synchronized ( Model.class ) // Make thread safe
{
GameObj ball = getBall(); // Ball in game
GameObj bat = getBat(); // Bat
List<GameObj> bricks = getBricks(); // Bricks
}
while (runGame)
{
synchronized ( Model.class ) // Make thread safe
{
float x = ball.getX(); // Current x,y position
float y = ball.getY();
// Deal with possible edge of board hit
if (x >= W - B - BALL_SIZE) ball.changeDirectionX();
if (x <= 0 + B ) ball.changeDirectionX();
if (y >= H - B - BALL_SIZE) // Bottom
{
ball.changeDirectionY(); addToScore( HIT_BOTTOM );
}
if (y <= 0 + M ) ball.changeDirectionY();
// As only a hit on the bat/ball is detected it is
// assumed to be on the top or bottom of the object.
// A hit on the left or right of the object
// has an interesting affect
String counter1 = "" + counter;
// Yellow Bricks
GameObj brick1 = bricks.get(0);
GameObj brick2 = bricks.get(1);
GameObj brick3 = bricks.get(2);
GameObj brick4 = bricks.get(3);
GameObj brick5 = bricks.get(4);
GameObj brick6 = bricks.get(5);
GameObj brick7 = bricks.get(6);
GameObj brick8 = bricks.get(7);
GameObj brick9 = bricks.get(8);
GameObj brick10 = bricks.get(9);
GameObj brick11 = bricks.get(10);
GameObj brick12 = bricks.get(11);
GameObj brick13 = bricks.get(12);
GameObj brick14 = bricks.get(13);
GameObj brick15 = bricks.get(14);
GameObj brick16 = bricks.get(15);
GameObj brick17 = bricks.get(16);
GameObj brick18 = bricks.get(17);
GameObj brick19 = bricks.get(18);
GameObj brick20 = bricks.get(19);
GameObj brick21 = bricks.get(20);
GameObj brick22 = bricks.get(21);
GameObj brick23 = bricks.get(22);
GameObj brick24 = bricks.get(23);
GameObj brick25 = bricks.get(24);
GameObj brick26 = bricks.get(25);
GameObj brick27 = bricks.get(26);
GameObj brick28 = bricks.get(27);
GameObj brick29 = bricks.get(28);
GameObj brick30 = bricks.get(29);
// Blue Bricks
GameObj brick31 = bricks.get(30);
GameObj brick32 = bricks.get(31);
GameObj brick33 = bricks.get(32);
GameObj brick34 = bricks.get(33);
GameObj brick35 = bricks.get(34);
GameObj brick36 = bricks.get(35);
GameObj brick37 = bricks.get(36);
GameObj brick38 = bricks.get(37);
GameObj brick39 = bricks.get(38);
GameObj brick40 = bricks.get(39);
if ( ball.hitBy(brick1)){
ball.changeDirectionY();
if (alreadyHit1 == true){
bricks.remove(0);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick2)){
ball.changeDirectionY();
if (alreadyHit2 == true){
bricks.remove(1);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick3)){
ball.changeDirectionY();
if (alreadyHit3 == true){
bricks.remove(2);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick4)){
ball.changeDirectionY();
if (alreadyHit4 == true){
bricks.remove(3);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick5)){
ball.changeDirectionY();
if (alreadyHit5 == true){
bricks.remove(4);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick6)){
ball.changeDirectionY();
if (alreadyHit6 == true){
bricks.remove(5);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick7)){
ball.changeDirectionY();
if (alreadyHit7 == true){
bricks.remove(6);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick8)){
ball.changeDirectionY();
if (alreadyHit8 == true){
bricks.remove(7);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick9)){
ball.changeDirectionY();
if (alreadyHit9 == true){
bricks.remove(8);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick10)){
ball.changeDirectionY();
if (alreadyHit10 == true){
bricks.remove(9);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
if ( ball.hitBy(brick11)){
ball.changeDirectionY();
bricks.remove(10);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick12)){
ball.changeDirectionY();
bricks.remove(11);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick13)){
ball.changeDirectionY();
bricks.remove(12);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick14)){
ball.changeDirectionY();
bricks.remove(13);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick15)){
ball.changeDirectionY();
bricks.remove(14);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick16)){
ball.changeDirectionY();
bricks.remove(15);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick17)){
ball.changeDirectionY();
bricks.remove(16);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick18)){
ball.changeDirectionY();
bricks.remove(17);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick19)){
ball.changeDirectionY();
bricks.remove(18);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick20)){
ball.changeDirectionY();
bricks.remove(19);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick21)){
ball.changeDirectionY();
bricks.remove(20);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick22)){
ball.changeDirectionY();
bricks.remove(21);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick23)){
ball.changeDirectionY();
bricks.remove(22);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick24)){
ball.changeDirectionY();
bricks.remove(23);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick25)){
ball.changeDirectionY();
bricks.remove(24);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick26)){
ball.changeDirectionY();
bricks.remove(25);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick27)){
ball.changeDirectionY();
bricks.remove(26);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick28)){
ball.changeDirectionY();
bricks.remove(27);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick29)){
ball.changeDirectionY();
bricks.remove(28);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick30)){
ball.changeDirectionY();
bricks.remove(29);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
//Blue bricks
if ( ball.hitBy(brick31)){
ball.changeDirectionY();
brick31 = new GameObj(50,350, BRICK_HEIGHT, BRICK_WIDTH, Colour.GREEN);
alreadyHit1 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick32)){
ball.changeDirectionY();
bricks.remove(31);
alreadyHit2 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick33)){
ball.changeDirectionY();
bricks.remove(32);
alreadyHit3 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick34)){
ball.changeDirectionY();
bricks.remove(33);
alreadyHit4 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick35)){
ball.changeDirectionY();
bricks.remove(34);
alreadyHit5 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick36)){
ball.changeDirectionY();
bricks.remove(35);
alreadyHit6 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick37)){
ball.changeDirectionY();
bricks.remove(36);
alreadyHit7 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick38)){
ball.changeDirectionY();
bricks.remove(37);
alreadyHit8 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick39)){
ball.changeDirectionY();
bricks.remove(38);
alreadyHit9 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( ball.hitBy(brick40)){
ball.changeDirectionY();
bricks.remove(39);
alreadyHit10 = true;
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
if ( counter < 1){
addToScore( HIT_BRICK );
Debug.trace("Well done! you have completed BreakOut!");
break;
}
if ( ball.hitBy(bat) )
ball.changeDirectionY();
}
modelChanged(); // Model changed refresh screen
Thread.sleep( fast ? 2 : 20 );
ball.moveX(S); ball.moveY(S);
}
} catch (Exception e)
{
Debug.error("Model.runAsSeparateThread - Error\n%s",
e.getMessage() );
}
}
上述方法中我尝试移除砖 block 的部分如下例所示:
if ( ball.hitBy(brick1)){
ball.changeDirectionY();
if (alreadyHit1 == true){
bricks.remove(0);
addToScore( HIT_BRICK );
counter = counter - 1;
Debug.trace(counter1);
}
}
alreadyHit1 是一个 boolean 值,当该砖 block 上方的蓝砖被摧毁时,该 boolean 值将变为 true,从而允许该砖 block 被摧毁。
谢谢您,希望能帮到您詹姆斯·霍利迪
最佳答案
当您在列表中添加/删除元素时,列表的大小将会调整。您可以使用数组代替。该数组是固定长度的。因此,您可以通过将元素设置为 null 来“删除”砖 block 。
如果您最初不知道砖 block 的数量,您可以通过填充 ArrayList 创建数组,然后调用 toArray
编辑:另外,现在我看到您已经对每 block 砖 block 分别被击中的情况进行了硬编码。您需要退后一步并了解循环/迭代。
例如,这是一个迭代所有砖 block 的方法(假设您有一个名为 bricksList
的砖 block 列表):
GameObj[] bricks = bricksList.toArray(new GameObj[bricksList.size()]);
for (int i = 0; i < bricks.length; i++) {
if (ball.hitBy(bricks[i]) {
ball.chageDirectionY();
// more code here
}
}
关于Java Brick Breaker - 从数组中删除砖 block 而不移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43518207/
我的 blockly.js 文件中有以下代码 Blockly.Blocks['account_number'] = { // Other type. init: function() {
首先抱歉我的英语不好,我正在开发 Image Splitter 应用程序并且已经完成,但是现在的要求是当图像被分割(分成几 block /chunks)那么图像 block 的每一 block (ch
#value: 消息的返回值,当发送到一个 block 时,是该 block 中最后一句话的值。所以 [ 1 + 2. 3 + 4. ] value 计算结果为 7。我发现有时很难使用。有没有办法显式
我想构建一个包含 3 div 的响应式导航栏相同的 width和 height . 我申请了 inline-block到每个 block ,我得到一个我不理解的行为。 问题是,第三 block 由 2
我希望使用 Blockly 来允许非技术人员用户指定测试脚本。 它的一部分需要一个文件选择器,但是,我看不到 Blockly 有一个。是吗? 实际上,我找不到完整的标准 block 列表。谁有网址?
仅当您位于父 block 内部时,父 block 的 props.isSelected 才为 true,但当您在该 block 的 innerBlocks 内进行编辑时则不然。 如何从父 block
仅当您位于父 block 内部时,父 block 的 props.isSelected 才为 true,但当您在该 block 的 innerBlocks 内进行编辑时则不然。 如何从父 block
我想创建一个具有不同背景颜色 block 和不同悬停颜色 block 的导航栏 block 。我可以分别创建不同的悬停颜色 block 或不同的背景颜色 block ,但不能一起创建。所以请告诉我如何
我正在使用看到的代码 here定期执行代码: #define DELAY_IN_MS 1000 __block dispatch_time_t next = dispatch_time(DISPATC
为什么 block 必须被复制而不是保留?两者在引擎盖下有什么区别?在什么情况下不需要复制 block (如果有)? 最佳答案 通常,当您分配一个类的实例时,它会进入堆并一直存在,直到它被释放。但是,
我想弄清楚我这样做是否正确: 如果我有一个 block ,我会这样做: __weak MyClass *weakSelf = self; [self performBlock:^{
我想制作一个 4 block 导航菜单,虽然我已经显示了一个 block ,然后单击打开第二个 block ,从第二个开始选择并再次单击出现第三个 block ,第四个 block 相同...这是我的
例如,这样更好吗? try { synchronized (bean) { // Write something } } catch (Int
我想让一只乌龟检查前方小块的颜色并决定移动到哪里。如果前面的补丁不是白色的,那么乌龟向左或向右旋转并移动。我的 If 决策结构中出现错误,显示“此处应为 TRUE?FALSE,而不是 block 列表
我想创建一个 block 对角矩阵,其中对角 block 重复一定次数,非对角 block 都是零矩阵。例如,假设我们从一个矩阵开始: > diag.matrix [,1] [,2] [
我是区 block 链新手。突然我有一个问题,我们是否可以通过区 block 号来访问以太坊区 block 链上之前的区 block 数据。 例如我创建了一个block1、block2。 block
我是区 block 链新手。突然我有一个问题,我们是否可以通过区 block 号来访问以太坊区 block 链上之前的区 block 数据。 例如我创建了一个block1、block2。 block
我创建了一个等距环境,全部使用 Javascript 和 HTML5 (2D Canvas),大部分情况下工作正常。我面临的问题是使用不同高度的图 block ,然后对图 block 上的对象索引进行
这是令我困惑的代码: public Integer getInteger(BlockingQueue queue) { boolean interrupted = false; try
我有一个基于 TPL 数据流的应用程序,它仅使用批处理 block 和操作 block 就可以正常工作。 我已经添加了一个 TransformBlock 以尝试在发布到批处理 block 之前从源中转
我是一名优秀的程序员,十分优秀!