Just nu i M3-nätverket
Gå till innehåll
Jompan

Kontrollera positioner

Rekommendera Poster

Jompan
Uppgiften är att skapa metoden "shape.overlapPoint(posX, posY)" som ska kolla om positionen x resp y håller sig inom gällande yta. Svar med true eller false.
(Givna testvärden.)
 
Så här långt har jag kommit, vilket dock blir fel.
var shape = {
    x : "",
    y : "",
}; 

shape.init = function(x, y) {
this.x = x;
this.y = y;
}

shape.init = function(posX, posY) {
this.posX = posX;
this.posY = posY;
}

shape1= Object.create(shape);
shape1.init(103,75); 

var shape2= Object.create(shape);
shape2.init(50,64); 

shape1.overlapPoint = function(){
if (this.x < this.posX) {
return true;
}
else {
return false;
}
};

shape2.overlapPoint = function(){
if (this.y < this.posY) {
return true;
}
else {
return false;
}
}; 

Document.write = shape1 + ", " + shape2; 

Finns det någon som kan ge mig en hint?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jonas__B

Behöver man inte ha bredd och höjd på elementen istället för bara position?!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
ChromaWoods
Postad (redigerade)

Du blandar ihop x och y med posX och posY på ett märkligt sätt. Rent spontant:

 

För det första så definerar du shape.init två gånger, så den andra shape.init skriver över den första.

 

För det andra så jämför du bara posX i overlapPoint, du kollar inte posY över huvud taget.

 

För det tredje tror jag inte att du borde skapa overlapPoint två gånger för resp objekt (shape1 och shape2). Du borde istället sätta den metoden på konstruktor-objektet (shape).

 

För det fjärde så hanteras bara x och y.. det är ju bara en koordinat, en punkt? Hur kan det egentligen vara en "shape"? Vad är det konceptuella kriteriet för att ett objekt överlappar ett annat?

 

För det femte ser det lite fult ut att defaultvärdena i "shape" är tomma strängar, eftersom x, y, posX och posY är heltal (integers). Jag hade satt dem till null.

 

För det sjätte så kommer du inte att se något resultat så länge du inte faktiskt kallar på overlapPoint. Än så länge definerar du bara den metoden, men du kallar inte på den någonstans.

Redigerad av chromawoods

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jompan

Så rätt, så rätt. Jag får bli bättre på att tänka litet grundligare på vad jag egentligen ska göra. Men rent spontant så tycker jag att objekt-hantering är svårt.

Tack för tips och synpunkter.

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
ChromaWoods

Här är ett föslag från min sida. Notera att jag har samlat metoderna isOverlap och setPosition direkt under objektdefinitionen, men man kan även göra som du och definera metoderna i efterhand.

 

Denna lösning baseras på att en shape är en koordinat och både x- och y-attributet måste vara mindre än det andra objektets dito. Man kan tänka sig att utgångspunkten är 0 och 0 så att t.ex 100 och 100 bildar en kvadrat som är 100x100 pixlar stor. Typ. Och isåfall befinner sig ju en kvadrat som är 50x50 inuti den. Fast egentligen borde man ha bredd och höjd med i exemplet..

var shape = {
  xPos: null,
  yPos: null,
  
  isOverlap: function(otherShape) {
    if (otherShape.xPos < this.xPos && otherShape.yPos < this.yPos) { 
      return true; 
    }
    else { return false; }
  },
  
  setPosition: function(x, y) {
    this.xPos = x;
    this.yPos = y;
  }
  
};

var shape1 = Object.create(shape);
var shape2 = Object.create(shape);

shape1.setPosition(100, 100);
shape2.setPosition(50, 50);

console.log(shape1.isOverlap(shape2));
console.log(shape2.isOverlap(shape1));

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
Jompan

Tack för synpunkter och förslag till lösning.

eforum är verkligen ett ypperligt forum att ta till när alt strular!

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...